TypeScript项目中Tree Shaking没生效,如何排查配置问题?
我按照官方文档配置了TypeScript项目,打包时发现没摇树,打包体积还是很大。检查了tsconfig.json的module和target设置,也用了rollup打包,但导出的代码里还是包含未使用的代码…
// tsconfig.json
{
"compilerOptions": {
"module": "ESNext",
"target": "ESNext",
"moduleResolution": "node16",
"outDir": "./dist",
"declaration": true
}
}
比如工具库里的utils.ts明明只导出了两个函数,但打包后看到:
// 打包后的代码片段
function unusedFunc() { ... }
function usedFunc() { ... }
export { usedFunc };
尝试过设置”sideEffects”: false和调整treeshake配置都没用,是不是TypeScript特有的配置被忽略了?
还有个常见问题是Babel转译时会破坏tree shaking,如果你用@rollup/plugin-typescript插件就别再加Babel了,多一层转译反而坏事。