Webpack5 新特性

Webpack5 整体的方向性变化有以下几点:

  • 通过持久化硬盘缓存能力来提升构建性能

  • 通过更好的算法来改进长期缓存(降低产物资源的缓存失效率)

  • 添加了 Federation 新特性

  • 通过更好的 Tree Shaking 能力和代码的生成逻辑来优化产物的大小

  • 改善 web 平台的兼容性能力

  • 清除了内部结构中,在 Webpack4 没有重大更新而引入一些新特性时所遗留下来的一些奇怪的 state

  • 通过引入一些重大的变更为未来的一些特性做准备,使得能够长期的稳定在 Webpack5 版本上

提升细节

hash 设置优化

webpack4 是根据代码的结构生成 chunkhash,添加了空白行或注释,会引起 chunkhash 的变化

webpack5 是根据内容生成 chunkhash,改了注释或者变量不会引起 chunkhash 的变化,浏览器可以继续使用缓存

缓存效率

在webpack4 中,chunkId 与 moduleId 都是自增 id。只要我们新增一个模块,那么代码中 module 的数量就会发生变化,从而导致 moduleId 发生变化,于是文件内容就发生了变化。
chunkId 也是如此,新增一个入口的时候,chunk 数量的变化造成了 chunkId 的变化,导致了文件内容变化。所以对实际未改变的 chunk 文件不能有效利用

webpack5采用新的算法来计算确定性的chunkId和moduleId。可以有效利用缓存。在production模式下,optimization.chunkIdsoptimization.moduleIds 默认会设为 deterministic

新增了可以将缓存写入磁盘的配置项, 在命令行终止当前构建任务,再次启动构建时,可以复用上一次写入硬盘的缓存,加快构建过程

Last Updated:
Contributors: 156081289@qq.com