TypeScript 项目开启 strict 模式后 Tree Shaking 失效了?

程序猿奕瑞 阅读 3

我用 Vite + TypeScript 搭了个项目,之前 Tree Shaking 正常,但一开 strict: true 就发现打包体积变大了,没用的代码没被删掉。是不是 tsconfig 的配置影响了摇树?

我试过检查导出方式,也确认用了 ES Module 语法,但就是不行。这是我的 tsconfig 配置:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ESNext",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "moduleResolution": "bundler"
  }
}
我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
UX子璇
UX子璇 Lv1
我遇到过类似问题,strict模式确实会影响Tree Shaking,特别是strictNullChecks这个子选项。你现在的配置是把所有strict相关检查都打开了,建议先单独调试看看。

试试这样改tsconfig.json:

{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"strict": false,
"strictNullChecks": false,
"esModuleInterop": true,
"skipLibCheck": true,
"moduleResolution": "bundler"
}
}


然后逐步开启其他严格检查,比如先开noImplicitAny看看影响。通常问题出在类型声明被误认为有副作用,导致打包工具不敢删代码。

另外检查下你的类型定义文件,别用export =这种老语法,用标准的ES Module导出。顺便提醒,开strict模式虽然安全但确实可能带来打包问题,生产环境记得做最终的包体积检查。

如果还不行,在vite.config.js里显式配置treeshake试试:
export default defineConfig({
build: {
minify: 'terser',
terserOptions: {
compress: {
pure_funcs: ['console.log']
}
}
}
})
点赞
2026-03-05 12:24