为什么用了 lodash-es 还是没法 tree shaking 掉没用的函数?

皇甫建英 阅读 39

我项目里只用了 lodash-esdebounce,按理说其他函数应该被 tree shaking 掉,但打包后体积还是很大。我用的是 Vite + Vue3,默认配置应该支持 ES module 吧?也确认了导入方式是 import { debounce } from 'lodash-es',不是整个库引入。

是不是还需要额外配置?或者我的构建工具根本没生效?下面是我试的一个简单样式,跟问题无关,但页面里确实只引用了这一个工具函数:

.btn {
  padding: 8px 16px;
  background: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
}
.btn:hover {
  opacity: 0.9;
}
我来解答 赞 10 收藏
二维码
手机扫码查看
2 条解答
树遥
树遥 Lv1
按照规范来说,使用 import { debounce } from 'lodash-es' 应该是可以 tree shaking 的。不过有时候构建工具的配置或者某些插件的影响会导致 tree shaking 失效。

首先,确保你的 Vite 配置中没有禁用 tree shaking。默认情况下,Vite 是支持 tree shaking 的,但有时候自定义的 rollup 插件可能会干扰这个过程。

其次,检查一下你的生产环境构建命令是否正确。通常你需要运行 npm run build 或者 yarn build 来触发生产环境的构建,而不是开发环境的 serve 命令。

最后,可以尝试清理一下项目的缓存和 node_modules,然后重新安装依赖,有时候缓存的问题也会导致构建结果不符合预期。

如果以上步骤都没有解决问题,可能需要进一步检查 Vite 的具体配置,看看有没有其他地方影响了 tree shaking。有时候查看一下生成的构建报告也能提供一些线索。
点赞
2026-03-23 17:01
皇甫宇彤
哎...这问题我也遇到过。试试在vite.config.js里加这个:

optimizeDeps: {
exclude: ['lodash-es']
}


顺便确认下你的package.json里lodash-es版本是不是>=4.17.21,老版本tree shaking有问题。
点赞 2
2026-03-08 18:00