TL; DR
你必须使用
require('./app').default();
说明
巴贝尔5用于对export default
兼容性黑客:如果一个模块中只有一个出口,这是默认导出,它被分配到module.exports
。因此,举例来说,你的模块app.js
export default function() {}
将transpiled这个
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function() {};
module.exports = exports["default"];
这与require
-ing巴贝尔-transpiled模块(像你做纯粹兼容性是做)。它也不一致;如果某个模块包含已命名和默认导出,则它不能为require
-d。
实际上,根据ES6模块规范,默认导出为与名称为default
的命名导出无异,。这只是语法糖,可以在编译时静态解析,所以这
import something from './app';
是一样的,因为这
import { default as something } from './app';
话虽这么说,看来,巴贝尔6决定放弃互操作性黑客当传输模块时。现在,正如你看到的,没有更多的分配给module.exports
你的模块app.js被transpiled为
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function() {};
。为了require
这个模块,你需要做的
require('./app').default();
你有'.babelrc'吗?你是否在某处指定了Babel选项?我问,因为Babel 6默认不会传输任何东西,而且您没有在您发布的代码中指定'es2015'预设。 –
@IgorRaush我真的有'.babelrc',其他es6脚本正常运行 – XGHeaven
请阅读标签说明。 'babel'是用于带有所述名称的* Python库*的问题。 –