使用webpack中的require.ensure()函数来实现按需加载
require.ensure()
webpack 在编译的时候,会静态的解析代码中的require.ensure(),同时将模块添加到一个分开的chunk(块)中。这个chunk 会被webpack通过jsonp来按需加载。
语法如下:
require.ensure(dependencies: String[], callback: function(require), chunkName: String)
依赖 dependencies
这是一个字符串数组,通过这个参数,在所有的回调函数的代码被执行前,我们可以将所有需要用到的模块进行声明。到打包的时候会将它打包进当前目录中。
回调 cacllback
当所有的依赖都 加载完成后,webpack会执行这个函数。require 对象的一个实现会作为一个参数传递给这个回调函数。因此,我们可以进一步的 require()依赖和其他模块提供下一步的执行。
chunk 名称 chunkName
chunkName 是提供给这个特定的require.ensure()的chunk的名称。通过提供 require.ensure()不同的执行点相同的名称,我们可以保证所有的依赖都会一起放进相同额度文件束(bundle)
require.ensure() 的坑点
空数组作为参数
require.ensure([], function(require){ require('./a.js');});
以上代码保证了拆分点被创建,而且 a.js
被 webpack 分开打包。
依赖作为参数
require.ensure(['./a.js'], function(require) { require('./b.js');});
上面代码, a.js
和 b.js
都被打包到一起,而且从主文件束中拆分出来。但只有 b.js
的内容被执行。a.js
的内容仅仅是可被使用,但并没有被输出。
想去执行 a.js
,我们需要异步地引用它,如 require('./a.js')
,让它的 JavaScritp 被执行。
网友评论