【发布时间】:2017-03-11 21:50:06
【问题描述】:
在 Webpack 1.x 中,我曾经定期执行以下操作:
require.ensure([ './mod2.js' ], ( require ) => {
setTimeout(() => {
// some later point in time, most likely through any kind of event
var data = require( './mod2.js' ); // actual evaluating the code
},1100);
}, 'myModule2');
使用这种技术,我们能够通过网络传输 webpack-bundle,但在稍后的某个时间点评估来自该包的实际内容(JavaScript 代码)。此外,使用require.ensure,我们可以命名捆绑包,在本例中为 myModule2,因此当捆绑发生执行 webpack 时我们可以看到名称/别名。
在 Webpack 2.x 中,新的方法是使用 System.import。虽然我现在喜欢接收 Promise 对象,但这种风格有两个问题。上述代码的等效项如下所示:
System.import( './mod2.js' ).then( MOD2 => {
// bundle was transferred AND evaluated at this point
});
- 现在如何拆分传输和评估?
- 我们如何才能命名捆绑包?
Github 上的 Webpack documentation 表示如下:
全动态要求现在默认失败
现在只有一个表达式的依赖项(即 require(expr)) 创建一个空上下文而不是完整的上下文 目录。
最好重构此代码,因为它不适用于 ES6 模块。如果这是 不可能你可以使用 ContextReplacementPlugin 来提示 编译器正确解析。
我不确定这是否在这种情况下起作用。他们还在那里谈论代码拆分,但非常简短,他们没有提到任何“问题”或如何解决。
【问题讨论】:
-
为什么不在一个变量中捕获promise,然后在另一个代码段中触发
.then? -
@Claies 我看不出这有什么帮助。承诺仍将处理“两个”操作,转移 + 评估。如果我们有两个单独的承诺,那将是一件事情。
标签: javascript webpack webpack-2