site infoHacknerd | Tech Blog
blog cover

🪀 [Webpack实战: 入门、进阶与调优] 6. 代码分片

JavaScriptWebpack

通过入口划分代码

每个入口都会生成对于的资源,通过划分入口可以进行简单代码拆分

CommonsChunkPlugin

Webpack4之前内部自带插件webpack4后被替换为SplitChunks

optimizations.SplitChunks

javascriptCopy
module.exports = {
	...,
	optimization: {
		splitChunks: 'all'
	}
}

javascriptCopy
// foo.js
import React from 'react'
import('./bar.js')

// bar.js
import React from 'react'
console.log('bar.js')


// 打包结果
// foo.js              // foo.js的结果
// 0.foo.js            // foo.js 异步加载 bar 的结果
// vendors-main.foo.js // react 提取到了这里

  • 1.从命令式到声明式
  • 2.默认异步提取
  • 3.配置
  • javascriptCopy
    {
      splitChunks: {
        chunks: "async",                // 匹配模式 async | initial | all
                                        // async 为只提取异步chunk (默认)
                                        // initial 只对入口chunk生效
                                        // all 为两种模式都开启
      },
      minsize: {                        // minSize minChunks maxAsyncRequests maxInitialRequests
    																	  // 都属于匹配条件
        javascript: 30000,
        sty1e: 50000,
      },
      maxsize: 0,
      minChunks: 1,
      maxAsyncRequests: 5,
      maxInitialRequests: 3,
      
      automaticNameDelimiter: '~',
      name: true,                       // 会根据cacheGroups作用范围自动生成chunk命名
      cacheGroups: {
        vendors: {                      // 用于提取符合test的模块 这里提取node_modules
          test: / [\\/]node_modules[\\/]/,
          priority: -10,
        },
        default: {                      // 被动被引用多次的模块
          minChunks: 2,
          priority: -20,
          reuseExistingChunk: true,
        }
      }

    资源异步加载

  • 1.import()
  • 2.异步chunk配置
  • Contents

    • 通过入口划分代码
    • CommonsChunkPlugin
    • optimizations.SplitChunks
    • 资源异步加载

    2024/05/29 11:16