TL; DR
你必须用
require('./app').default();
说明
Babel 5曾经具有以下兼容性问题export default
:如果一个模块仅包含一个导出,并且它是默认导出,则将其分配给module.exports
。因此,例如,您的模块app.js
export default function () {}
将被翻译成这个
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
这样做纯粹是为了与require
-ing Babel转换的模块兼容(就像您所做的那样)。这也不一致。如果模块同时包含命名导出和默认导出,则不能使用require
-d。
实际上,根据ES6模块规范,默认导出与名称为的命名导出没有区别default
。它只是语法糖,可以在编译时静态解析,因此
import something from './app';
与此相同
import { default as something } from './app';
话虽如此,Babel 6似乎决定在转译模块时放弃对互操作性的攻击。现在,您的模块app.js被编译为
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
如您所见,不再分配给module.exports
。对于require
这个模块,你需要做
require('./app').default();
.babelrc
吗?您是否在某处指定Babel选项?我问是因为Babel 6默认不翻译任何东西,并且您未es2015
在发布的代码中指定预设。