前言
webpack是一个模块打包工具,其最新版本是webpack5,它可以将多个模块进行打包,并生成一个或多个静态资源文件。webpack的配置文件为webpack.config.js,该文件包含webpack的配置信息,如入口文件、输出文件、模块加载规则、插件等。下面我们将以一个简单的webpack配置文件为例,对webpack配置项进行介绍。
webpack编译流程
- 读取配置文件:webpack会从配置文件和shell中读取配置信息,并生成一个配置对象。
- 开始编译:初始化Compiler对象,并调用Compiler对象的run方法,开始编译。
- 解析入口文件:根据配置文件中的入口文件路径,解析入口文件。
- 编译模块:从入口文件开始,根据正则匹配到的loader对模块进行转换,生成输出文件,找到模块所依赖的模块,通过递归本步骤直到所有依赖的模块都转换完毕。
- 完成模块编译:得到所有模块编译后的内容以及他们的依赖关系生成一个依赖图。依赖图是一个对象,包含了所有模块的依赖关系。
- 输出资源:包含多个模块的chunk,每个chunk转换成单独的文件,加入到输出列表,此时可以对这些内容进行修改。
- 输出文件:根据配置确定输出的文件名和路径,创建输出文件,将模块内容写入文件中,并完成其他必要的操作,如添加头部信息、压缩代码等。
- 监听文件变化:根据配置文件中的监听文件路径,监听文件变化,并重新构建。
在上述过程中webpack会在1-6的各个阶段广播事件,插件可以通过监听这些事件调用webpack的API来执行自定义的操作。
webpack配置项
1 |
|
总结
external 和 splitChunks优化策略的区别
splitChunks 和 externals 是两种不同的代码优化策略,它们的核心区别在于:是否将依赖打包到最终产物中。
externals 可以将某些依赖从最终产物中排除,从而减少最终产物的体积。例如,如果你的代码中引入了 jQuery,你可以将 jQuery 设置为 external,这样 jQuery 就不会被打包进最终产物中。
splitChunks:适合优化内部代码结构,提取公共依赖,实现按需加载。
externals:适合排除大型第三方库,减少打包体积,利用 CDN 加速或共享全局资源。
splitChunks性能优化建议
- 合理设置 minSize:过小会导致生成过多小文件,增加请求数,过大会导致单个文件过大,影响加载速度
- 控制缓存组优先级:第三方库优先级应高于公共组件(如 vendor 设为 -10,common 设为 -20)避免过度拆分:
- 不要为每个模块创建单独的 chunk,否则会导致请求数过多
- 结合 CDN 使用:将 vendor chunk 部署到 CDN,利用浏览器缓存
- 使用 webpack-bundle-analyzer 分析打包结果,以确定哪些模块需要拆分