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