TL; DR
Bạn phải sử dụng
require('./app').default();
Giải thích
Babel 5 sử dụng để có một hack tương thích cho export default
: nếu một module chứa chỉ có một xuất khẩu, và đó là một lần xuất mặc định, nó được gán cho module.exports
. Vì vậy, ví dụ, mô-đun của bạn app.js
export default function() {}
sẽ được transpiled này
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function() {};
module.exports = exports["default"];
này được thực hiện hoàn toàn để tương thích với require
-ing module Babel-transpiled (giống như bạn đang làm). Nó cũng không phù hợp; nếu một mô-đun có chứa cả tên và mặc định xuất, nó không thể là require
-d.
Thực tế, theo thông số mô-đun ES6, xuất mặc định là không khác nhau so với xuất có tên với tên default
. Nó chỉ là cú pháp đường có thể được tĩnh giải quyết tại thời gian biên dịch, vì vậy đây
import something from './app';
cũng giống như thế này
import { default as something } from './app';
đó đang được nói, dường như Babel 6 quyết định thả các khả năng tương tác Hack khi transpiling module. Bây giờ, bạn mô-đun app.js được transpiled như
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function() {};
Như bạn thấy, nhiệm vụ không để module.exports
.Để require
mô-đun này, bạn cần phải làm
require('./app').default();
Bạn có '.babelrc' không? Bạn có đang chỉ định tùy chọn Babel ở đâu đó không? Tôi yêu cầu vì Babel 6 không transpile bất cứ điều gì theo mặc định và bạn không chỉ định cài đặt trước 'es2015' trong mã bạn đã đăng. –
@IgorRaush Tôi thực sự có '.babelrc', tập lệnh es6 khác đang chạy bình thường – XGHeaven
Vui lòng đọc mô tả thẻ. 'babel' dành cho các câu hỏi cho một thư viện * * * * * * với tên đã nói. –