【发布时间】:2017-01-16 10:40:41
【问题描述】:
之前,babel 会添加module.exports = exports["default"] 这一行。它不再这样做了。这意味着在我能做之前:
var foo = require('./foo');
// use foo
现在我必须这样做:
var foo = require('./foo').default;
// use foo
没什么大不了的(我猜这一直都是应该的)。 问题是我有很多代码取决于过去的工作方式(我可以将大部分代码转换为 ES6 导入,但不是全部)。任何人都可以给我一些提示,告诉我如何让旧方式工作,而不必通过我的项目并修复这个问题(或者甚至一些关于如何编写代码模块来做到这一点的说明会很漂亮)。
谢谢!
例子:
输入:
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"]。
编辑
您可能对我在解决我的具体问题后写的这篇博文感兴趣:Misunderstanding ES6 Modules, Upgrading Babel, Tears, and a Solution
【问题讨论】:
-
我很好奇,如果您在使用 Babel 的代码库中工作,在哪些情况下需要
require?很有可能,还有其他方法可以让您避免这种情况。 -
我正在利用 Webpack 的一项功能,如果在诸如
if (false) { require('./foo') }这样的死代码中发现它不需要代码,使用 webpack 会跳过在结果包中实际包含foo.js。 -
你的
false在那里切换?如果这是您的 webpack 配置中可用的条件,则可能还有另一种选择。 -
在我找到这篇文章之前,这个问题已经给我带来了几个小时的问题。我最终用
module.exports = {foo, bar}替换了我所有的export default {foo, bar}。我非常喜欢现在不支持的 incorrect 方法。 -
@loganfsmyth 这对于传递整个模块而无需大量重复代码非常有用。看看这个要点gist.github.com/loopmode/3eeaf0764c30439add1d8008e39d0267
标签: ecmascript-6 commonjs babeljs