重大变更:Babel 6 导出默认行为
随着 Babel 6 的发布,默认导出的处理方式发生了重大变化。虽然 Babel 之前添加了 module.exports = Exports["default"] 行,但此功能已被删除。
此修改需要更改模块导入语法。以前,使用旧语法的代码:
var foo = require('./foo'); // use foo
现在必须采用以下语法:
var foo = require('./foo').default; // use foo
虽然此调整可能看起来很小,但它可能会对代码严重依赖于先前导出机制的项目构成挑战。
解决方法
如果需要遗留导出行为,建议直接使用 CommonJS。或者,可以使用自定义插件来提供所需的兼容性。该插件的功能可能会反映 Babel 6 中删除的行为,将 module.exports = Exports["default"] 行添加到转译输出中。
命名导出的影响
值得注意的是,删除自动 module.exports 分配改进了 ES6 语义并防止潜在的混淆。命名导出现在将按预期运行,不会意外分配给默认导出。
示例
以下代码演示了 Babel 5 和 Babel 6 导出行为之间的差异:
// Input
const foo = {}
export default foo
Babel 5 输出
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];
Babel 6 输出
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
可以观察到,输出中的唯一区别是 Babel 6 中缺少 module.exports = Exports["default"]。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3