1、实现代码code splitting的好处
1-1、在项目中项目代码大小为1m,引入的模块为1m,总共大小为2m,都打包在main.js,初次请求项目大小为2m,如果改了项目代码中的一部分,由于都在main.js中,再次刷新,还是请求2m,请求缓慢。
1-2、使用code splitting后,项目代码跟引入模块代码打包成多个文件,项目大小为1m,引入模块为1m,初次请求为2m,如果改了项目中的代码,只会改变main.js中的代码,模块分割出的1m代码代码没有改变,刷新浏览器,1m的模块代码不用请求,从浏览器缓存中读取,只需要请求1m的项目代码,节省了项目的请求时间。
2、使用不同入口实现代码的code splitting
yarn add lodash
1、src/lodash.js import _ from 'lodash'
2、src/main.js console.log(_.join([1,2,3],'-'))
3、webpack.config.js部分配置
module.exports={
entry: {
lodash:'./src/lodash.js',
main: './src/main.js'
},
}
总结:可以看见项目中dist生成lodash.js和main.js两个文件,code splitting成功
3、删除src/lodash.js及webpack.config.js中的lodash入口配置,使用webpack自带配置自动实现code splitting
1、src/main.js
//1.1、同步引入方式
import _ from 'lodash'
let data = _.join([1, 2, 3], '-')
console.log(data)
//1.2、异步引入方式
function getComponent() {
return import('lodash').then(({ default: _ }) => {
let dom = document.createElement('div')
dom.innerText = _.join([1, 2, 3], '_')
return dom
})
}
getComponent().then(element => {
document.body.appendChild(element)
})
//1.3、es6异步引入方式
async function getComponent() {
let { default: _ } = await import(/*webpackChunkName:"lodash"*/'lodash');
let div = document.createElement('div')
div.innerHTML = _.join(['a', 'b', 'c'], "-")
return div
}
document.addEventListener('click', () => {
getComponent().then(element => {
document.querySelector("#root").appendChild(element)
})
})
2、webpack.cong.js 部分配置
optimization: {
splitChunks:{
chunks:'all'
}
}
总结:可以看见dist自动生成了lodash.js,code splitting 配置成功
浙公网安备 33010602011771号