TypeScript 项目开启 strict 模式后 Tree Shaking 失效了?
我用 Vite + TypeScript 搭了个项目,之前 Tree Shaking 正常,但一开 strict: true 就发现打包体积变大了,没用的代码没被删掉。是不是 tsconfig 的配置影响了摇树?
我试过检查导出方式,也确认用了 ES Module 语法,但就是不行。这是我的 tsconfig 配置:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"moduleResolution": "bundler"
}
}
strictNullChecks这个子选项。你现在的配置是把所有strict相关检查都打开了,建议先单独调试看看。试试这样改tsconfig.json:
然后逐步开启其他严格检查,比如先开
noImplicitAny看看影响。通常问题出在类型声明被误认为有副作用,导致打包工具不敢删代码。另外检查下你的类型定义文件,别用
export =这种老语法,用标准的ES Module导出。顺便提醒,开strict模式虽然安全但确实可能带来打包问题,生产环境记得做最终的包体积检查。如果还不行,在vite.config.js里显式配置treeshake试试: