news 2026/4/23 18:48:31

你的 Tree Shaking 可能是“假的”?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
你的 Tree Shaking 可能是“假的”?

你以为你用了 ES Module,就自动开启 Tree Shaking 了?
很遗憾,大多数情况下——并没有真正生效。

很多项目打包后:

  • 明明没用的代码还在
  • bundle 体积异常膨胀
  • 优化了半天效果不明显

问题很可能出在一个你没注意的地方:package.json里的sideEffects

先说结论(别绕)

Tree Shaking 能不能真正生效,不只取决于 ES Module,还取决于打包器是否“敢删你的代码”。

sideEffects,就是这个“信任开关”。

sideEffects 到底是啥?

它是写在package.json里的一个字段:

{ "sideEffects": false }

它的含义是:这个项目里的文件没有副作用,可以安全删除未引用代码

什么是“副作用”?(这是关键)

副作用的定义很简单:执行这个模块时,会对外部产生影响(哪怕你没用它的导出)

有副作用的代码

// utils.jsconsole.log('hello')// 会执行
// theme.js document.body.style.background = 'red'
// index.js import './global.css' // 会影响页面样式

这些都属于“副作用模块”

无副作用的代码

exportfunctionadd(a,b){returna+b}

👉 纯函数 + 无全局修改 = 可安全删除

为什么没有 sideEffects 就“摇不掉”?

打包器(比如 Webpack)在做 Tree Shaking 时,会非常保守:

“我删了这个文件,会不会出 bug?”

如果它无法确定:宁可保留,也不删除。结果就是:

import{a}from'./utils'
// utils.jsexportconsta=1exportconstb=heavyFunction()

即使b没用,也可能被打进 bundle

sideEffects: false 做了什么?

{"sideEffects":false}

等价于告诉打包器:“放心删,我的代码是纯的,不会有隐藏影响”。

实际效果:

  • 未引用模块 → 被删除
  • bundle 体积明显下降
  • Tree Shaking 真正生效

但这里有个坑(很多人会踩)

你不能无脑写:

{ "sideEffects": false }

因为现实项目里通常会有:

  • CSS
  • polyfill
  • 初始化代码

正确姿势(工程推荐):

{ "sideEffects": [ "*.css" ] }

含义:JS 可以被 Tree Shaking,CSS 保留(避免被误删)。

再讲一个更隐蔽的坑(很多人不知道)

即使你写了sideEffects,Tree Shaking 仍然可能失败,常见原因:

1)使用 CommonJS

constutils=require('./utils')

无法做静态分析 → 直接失效

2)动态引用

import(`./${name}.js`)

路径不确定 → 无法分析

3)第三方库没写 sideEffects

你写了没用,它的代码还是不会被删

总结

你遇到以下情况时,基本可以怀疑:

  • bundle 体积异常大
  • Tree Shaking 看起来“没效果”
  • 引入 UI 库后体积暴涨

sideEffects,就是这条链路里最容易被忽略、但影响最大的一个开关。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 18:48:04

DHT11、DHT22、AM2302怎么选?一篇讲透温湿度传感器选型与实战避坑

DHT11、DHT22、AM2302温湿度传感器选型指南:从参数对比到实战避坑 在智能家居和物联网项目中,温湿度传感器的选择往往决定了整个系统的数据可靠性和成本结构。面对市场上主流的DHT11、DHT22和AM2302这三款传感器,很多开发者都会陷入选择困境—…

作者头像 李华
网站建设 2026/4/23 18:44:42

Qwen3.5-9B-AWQ-4bit保姆级教程:从实例创建到图片问答结果返回全过程

Qwen3.5-9B-AWQ-4bit保姆级教程:从实例创建到图片问答结果返回全过程 1. 模型介绍 Qwen3.5-9B-AWQ-4bit是一个支持图像理解的多模态模型,能够结合上传图片与文字提示词,输出中文分析结果。这个模型特别适合处理以下任务: 图片主…

作者头像 李华
网站建设 2026/4/23 18:43:42

分形几何系统讲义【乖乖数学】

分形几何系统讲义【乖乖数学】 作者:乖乖数学抖音名;国际精算师SOA微信名; 创作时间:20260401

作者头像 李华
网站建设 2026/4/23 18:41:31

从电路设计实战出发:聊聊增强型与耗尽型MOS管到底该怎么选?

从电路设计实战出发:聊聊增强型与耗尽型MOS管到底该怎么选? 在硬件工程师的日常工作中,MOS管的选择往往直接关系到电路性能的优劣。面对增强型和耗尽型这两种基础但特性迥异的器件,很多开发者容易陷入理论参数对比的泥潭&#xff…

作者头像 李华