webpack的code splitting详解

代码分割Code Splitting

通常来讲,我们写项目的时候可以分为两部分,一部分是引用的类库,另一部分是我们写的业务逻辑代码。这两部分打包后会合并到一个js文件中。
这样方式的缺点是:
一、打包生成的main.js可能会很大,首次访问时会慢
二、当页面业务逻辑发生变化时,又要加载全部的内容
解决方式:使用代码分割,将类库的代码打包成一个js文件,将业务逻辑代码打包成一个文件。
这种方式的优点:
一、分为两个js文件,文件体积较小,可以并行加载,提升加载速度
二、当业务逻辑代码发生变化时,只需要加载业务逻辑代码的js文件即可(用户浏览器有缓存)

方式一 手动分割

以lodash类库为例
lodash.js

import _ from 'lodash';
window._ = _;

webpack.config.js

entry: {
    lodash: './src/lodash.js',
    main: './src/index.js'
}

方式二 webpack

npm i -D @babel/plugin-syntax-dynamic-import 用以解析识别import()动态导入语法---并非转换,而是解析识别

在webpack.common.js配置

optimization: {
    splitChunks: { // 默认配置即可 代码分割
        chunks: 'all',
    }
}

在.babelrc 中配置

"plugins": ["@babel/plugin-syntax-dynamic-import"]
index.js文件
const lodash = () => import(/* webpackChunkName:"test" */'lodash');

 打包后生成的文件名称:vendors~test.js

若配置成以下形式,生成文件变成test.js

splitChunks: { // 默认配置即可 代码分割
    chunks: 'all',
    cacheGroups: { // 缓存组
        vendors: false,
        default: false,
    }
}

 splitChunks详细配置

optimization: {
    splitChunks: { // 默认配置
        chunks: "all", // async只对异步代码生效 all同步异步都分割 initial同步需配合cacheGroups
        minSize: 30000, // >30kb就做代码分割
        minChunks: 1, // 当一个模块用了多少次才进行代码分割
        maxAsyncRequests: 5, // 同时加载的模块数
        maxInitialRequests: 3, // 入口文件的代码分割个数
        automaticNameDelimiter: '~', // 组合文件连接的连接符
        name: true, // 让cacheGroups里的名字有效
        cacheGroups: { // 缓存组
            vendors: { // 如果代码是node_modules里的则打包成vendors.js
                test: /[\\/]node_modules[\\/]/,
                priority: -10, // 优先级
                filename: 'vendors.js' // 若不配置,生成的文件名以vendors+~+ertry里配置的name 
            },
            default: {
                // minChunks: 2,
                priority: -20,
                reuseExistingChunk: true, // 如果一个模块被打包过直接复用
                fileName: 'common.js'
            }
        }
    }
},


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wflynn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值