以前,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,眼泪和解决方案
if (false) { require('./foo') }
使用webpack会实际跳过包含foo.js
在结果包中的代码。
false
在那里切换?如果您的webpack配置中存在这种情况,则可能还有其他选择。
export default {foo, bar}
用module.exports = {foo, bar}
。我挺喜欢的不正确这是现在不支持的方法。
require
如果您在使用Babel的代码库中工作,在什么情况下需要?可能还有其他方法可以让您避免这种情况。