我最近将我的应用程序升级到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?