第一个参数很少有用。要了解它为什么存在并导致混乱,请参阅我的另一个答案。
遵守规范
第一个参数的一个用例可能是为了清楚起见指定所有依赖项并遵守规范。但这完全是可选的。
将模块添加到块中以使块相似
假设您在应用程序的不同部分有两个分割点。第一个分割点取决于模块a,第二个取决于模块a和b。为了消除下载a两次的风险,您可以决定将两个模块放在一个块中:
// First split point
require.ensure(['b'], (require) => {
require('a');
});
将模块拉入父块
考虑以下代码拆分场景:
require.ensure([], (require) => {
...
require.ensure([], (require) => {
require('a');
require('b');
});
require.ensure([], (require) => {
require('a');
require('c');
});
...
});
在这种情况下,模块a将在两个嵌套块中结束。如果经常加载至少一个嵌套块,您可以决定移动a到父块中:
require.ensure(['a'], (require) => {
...
将模块添加到块中require.include
考虑前面的例子。还有另一种方法可以拉a入父块:
require.ensure([], (require) => {
require.include('a');
...
在此特定示例中,两种解决方案是等效的,使用require.include. 但是,如果您无权访问拆分点的代码,则父块是一个入口块,或者您使用现代import()语法,require.include是您唯一的选择。
可以使用同步require或import. 的优点require.include是它只加载模块而不评估它们。如果它很昂贵或取决于应用程序状态,例如,需要加载 polyfills、存在 DOM 节点等,这对于推迟模块的评估可能很有用。