笔记

Javascript/CSS

Vue/React

其它

杂物室

杂谈

工具

影像

sleep
宝可梦
西塞尔
Dedsec
Scarlet
Violet
P5
满月
黄昏
深夜
经典
回到顶部

webpack打包项目时会打包已经import但没用到的模块吗 #121

Anuluca     Date : 2024-08-22   Tags : 2

在使用 Webpack 打包项目时,默认情况下,Webpack 会将所有被 import 的模块都打包进最终的输出文件中,即使这些模块在代码中未被实际使用。这是因为 Webpack 会按照模块的依赖关系来构建模块图,并把所有依赖都打包进去。

不过,Webpack 提供了一些优化手段来减少未使用代码的打包,包括以下两个重要的概念:

1. Tree Shaking

Tree Shaking 是一种通过静态分析 ES6 模块导入导出语句的方式来删除未使用代码的技术。Webpack 在生产模式下会自动启用 Tree Shaking。这意味着如果你导入了一个模块,但没有使用其中的某些导出内容,Webpack 可以在打包时去掉这些未使用的部分。

  • 要求:Tree Shaking 依赖于 ES6 的模块系统(importexport)。如果使用的是 CommonJS(requiremodule.exports),则 Tree Shaking 无法生效。
  • 限制:有时候,Tree Shaking 可能无法删除副作用函数,除非在 package.json 中明确标识 sideEffects: false(或者指定具体有副作用的文件)。

2. Dead Code Elimination

Dead Code Elimination(DCE)是进一步清理未使用代码的过程。虽然 Tree Shaking 可以移除未使用的模块导出内容,DCE 则通过代码压缩工具(如 Terser)来移除从未执行的代码路径。

  • 启用方式:在 Webpack 的生产模式下,代码会自动进行压缩,并通过 Terser 这样的工具进行 DCE,从而进一步减少打包文件的大小。

总结

  • 默认行为:如果你使用了 import 语句,Webpack 默认会打包这些模块,即使你没有使用它们。
  • 优化:通过 Tree Shaking 和 DCE,Webpack 可以减少未使用的代码,优化打包结果。
  • 使用建议:确保使用 ES6 模块,并在生产模式下打包,能够有效利用这些优化技术,减少打包体积。
由于某些原因,博客图床于5月26日惨遭爆破,目前正在整理需要的图片并迁移存活的图片到新图床,预计6月10日重新上线网站
   
THE END
   
讨论
 
© 2018 - 2024 Anuluca ▌友情链接 Tsuki's blog | Poke amice | 夜航星
  复制成功!