欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webpack ——代码分割ensure

程序员文章站 2022-07-14 20:38:58
...
require.ensure 异步加载(代码切割)
 把js模块给独立导出一个.js文件,然后使用这个模块的时候,
 webpack会构造script dom元素,由浏览器发起异步请求这个js文件。

 
mapBtn.click(function() {
 require.ensure([], function() {
 var baidumap = require('./baidumap.js') //baidumap.js放在我们当前目录下
 })
 })

分析: require.ensure这个函数是一个代码分离的分割线,表示 回调里面的require 是我们想要进行分割出去的,即require(’./baidumap.js’),把baidumap.js分割出去,形成一个 webpack打包的单独js文件。当然ensure里面也是可以写一些同步的require的,比如
var sync = require('syncdemo.js')   //下面ensure里面也用到
 mapBtn.click(function() {
 require.ensure([], function() {
 var baidumap = require('./baidumap.js') //baidumap.js放在我们当前目录下
 var sync = require('syncdemo.js')  //这个不会独立出去,因为它已经加载到模块缓存中了
 })
 })

ensure的第一个参数[] 是它依赖的异步模块的数组;第二个参数为回调函数,第三个参数为模块名,用于构建时生成文件名使用。
注意:require.ensure模块只会被下载下来不会被执行,只有当回调函数使用require时这个模块才会被执行
实例:
//同步加载:util-sync是立即马上依赖的工具箱。但是它又非常的大,所以将其配置打包成一个公共模块, 利用浏览器的并发加载,加快下载速度
 var util_sync = require('./util-sync.js')

 alert(util_sync.data)

 document.getElementById("aBtn").onclick = function() {

 require.ensure([], function() {
 //workA-async不是entry.js必须有的,即可能发生的操作,那么我们把 他们利用异步加载,当发生的时候再去加载就行了
 var awork = require('./workA-async.js')
 alert(awork.data)
 //异步里面再导入同步模块--实际是使用同步中的模块
 var util1 = require('./util-sync.js')
 })
 }

 document.getElementById("bBtn").onclick = function() {

 require.ensure([], function() {
 var bwork = require('./workB-async.js')
 alert(bwork.data)
 })
 }