ES6模块:根据规范,循环依赖性如何工作? (webpack vs babel)

时间:2017-04-25 12:12:33

标签: javascript ecmascript-6 es6-modules

我最近将我的应用程序升级到webpack 2.由于webpack 2现在支持ES6模块,我使用 {modules:false} 配置我的babel es2015预设,让webpack直接处理导入。

我的应用程序中存在循环依赖关系,Babel处理得很好,但webpack 2本身并没有。我调查了这一点,发现Babel生成的代码看起来像这样:

A.js

exports.someFunc = someFunc;
var _b = __webpack_require__(1071);
// ....more imports

B.js

var _a = __webpack_require__(256); 

// => _a.someFunc() can now be called immediately as part of the module side effect, i.e. used as a decorator.

这很有效,因为Babel将A.js中的 exports 赋值移到了顶部。

让webpack处理加载,生成的代码将是这样的:

A.js:

var __WEBPACK_IMPORTED_MODULE_7__B__ = __webpack_require__(1071);
exports.someFunc = someFunc;

因此,当模块B首次运行时,它还无法访问someFunc。要明确的是,如果someFunc仅在以后使用,那就没问题,但如果someFunc是模块初始化期间使用的装饰器则不行。

谁是对的? Babel或Webpack?

0 个答案:

没有答案