以前,babel会添加这一行module.exports = exports["default"]
。现在不再这样做了。这意味着以前我可以这样做:
var foo = require('./foo');
// use foo
现在我必须这样做:
var foo = require('./foo').default;
// use foo
这并不是一个大问题(我猜这才是一开始就应该的方式)。 问题在于,我有很多代码依赖于以前的工作方式(我可以将其中大部分转换为ES6导入,但不是全部)。是否有人可以给我一些提示,让旧方式能够正常工作,而无需遍历我的项目并修复它(甚至提供一些有关如何编写codemod的说明也会很棒)。
谢谢!
示例:
输入:
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 输出(配合 es2015 插件):
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
注意输出结果中唯一的不同是 module.exports = exports["default"]
。
编辑
如果你想了解我解决特定问题后写的博客文章,可能会感兴趣:误解ES6模块,升级Babel,眼泪以及解决方案
require
?很有可能,还有其他方法可以避免使用它。 - loganfsmythif (false) { require('./foo') }
,Webpack将不需要包含foo.js
文件在生成的捆绑包中。 - kentcdoddsfalse
开关是什么?如果它是在你的webpack配置中可用的条件,可能还有其他选项。 - loganfsmythmodule.exports = {foo, bar}
替换了所有的export default {foo, bar}
。我非常喜欢这种现在不再支持的“错误”方法。 - stumct