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 requirecá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 requirevớ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ỉ địnhes2015giá trị đặt trước trong mã bạn đã đăng.