webpack的require.ensure是如何工作的?

mpe*_*pen 5 javascript webpack

文档中,您可以这样做:

require.ensure(["module-a", "module-b"], function(require) {
    var a = require("module-a");
    // ...
});
Run Code Online (Sandbox Code Playgroud)

require.ensure直到你require()他们不评估模块.后来,他们举了另一个例子,

require.ensure([], function(require) {
  let contacts = require('./contacts')
});
Run Code Online (Sandbox Code Playgroud)

Ensure数组为空的位置.

所以我的问题是:

  1. 我必须两次指定我的模块吗?一次作为第一个参数require.ensure并再次回调内部?指定或省略第一个arg之间是否存在差异?

  2. 回调给了我一个新require功能,但我们已经有了一个全局功能.本地和全球之间有区别吗?webpack甚至可以区分它们,因为它必须静态地执行此操作吗?

ago*_*dis 1

Webpack现在支持了 import(),使用起来更加方便。require.ensure仍然支持,所以回到您的问题:

  1. 您不必指定模块两次。Webpack 静态解析源代码,并将第一个参数数组中提到的所有模块以及回调函数体模块中的所有required 添加到不同的块中

  2. 实际上传递给的函数callback没有被使用,你应该始终使用 global require这是我在官方 webpack文档中注意到的奇怪行为。

  • 但 `import()` 并不严格相同。下载完成后就会立即评估脚本,不是吗?而“require.ensure”将确保在触发回调之前下载脚本,但在您明确要求它们之前不会评估它们。我不完全确定您何时需要这种区别,但它就在那里:-)无论如何,感谢您回答我的问题!我有一种感觉,“require”参数发生了一些奇怪的事情。 (2认同)