# code splitting代码分包

将一个大的js文件拆成多个,可以让浏览器并行加载,速度一般会更快一些

cnpm i lodash --save
entry: {
	lodash:'./lodash.js',
	main: './index.js'
	},

入口也变成了多个了,注意加载的先后依赖顺序

# webpack代码分割/代码分包

optimization:{
	splitChunks:{
		chunks:"all"
	}
}

# 实验语法使用配置

cnpm i babel-plugin-dynamic-import-webpcak --save-dev

在.babelrc 中配置一下

{
	......
	"plugins": ["dynamic-import-webpcak"]
} 

提示

这不是官方插件,可以更换为 @babel/plugin-syntax-dynamic-import

# webpack代码分割两种形式

  • 同步代码分割 -> 配置 optimization 即可
  • 异步代码分割 -> 如使用函数和promise动态引入的,无需配置,会自动进行分割

# splitChunks

module.exports = {
  //...
  optimization: {
    splitChunks: {
      chunks: 'async',//对哪些代码分割,async只对异步,all则为同步异步,initial对同步代码分割
      minSize: 30000,//大于minSize做代码分割
      maxSize: 0,//对已分割的文件如果过大还可以再度分割,但是不一定能分割成功
      minChunks: 1,//达到依赖次数多少才打包
      maxAsyncRequests: 5,
      maxInitialRequests: 3,
      automaticNameDelimiter: '~',
      automaticNameMaxLength: 30,
      name: true,
	  //cacheGroups缓存组 对同步代码打包的一些配置
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          priority: -10,
		  //filename:"xxx.js"//文件名,可配置
        },
        default: {
          minChunks: 2,
          priority: -20,//优先级
          reuseExistingChunk: true//已经在别的文件打包过得代码再次使用忽略
        }
      }
    }
  }
};
optimization: {
   splitChunks: {
      chunks: "all",
      cacheGroups: {
        // layouts通常是admin项目的主体布局组件,所有路由组件都要使用的
        // 可以单独打包,从而复用
        // 如果项目中没有,请删除
        layouts: {
          name: "layouts",
          test: path.resolve(__dirname, "../src/layouts"),
          priority: 40,
        },
        // 如果项目中使用element-plus,此时将所有node_modules打包在一起,那么打包输出文件会比较大。
        // 所以我们将node_modules中比较大的模块单独打包,从而并行加载速度更好
        // 如果项目中没有,请删除
        elementUI: {
          name: "chunk-elementPlus",
          // 不同系统的斜杠可能不一样\/,最好都处理一下
          test: /[\\/]node_modules[\\/]_?element-plus(.*)/,
          priority: 30,
        },
        // 将vue相关的库单独打包,减少node_modules的chunk体积。
        vue: {
          name: "vue",
          test: /[\\/]node_modules[\\/]vue(.*)[\\/]/,
          chunks: "initial",
          priority: 20,
        },
        libs: {
          name: "chunk-libs",
          test: /[\\/]node_modules[\\/]/,
          priority: 10, // 权重最低,优先考虑前面内容
          chunks: "initial",
        },
      },
    }
}
最后更新: 5/1/2023, 9:10:04 AM