Angular环境文件未执行代码是否会被Tree Shaking移除?
未执行代码是否会被包含在最终打包文件中?
假设你的environment.ts文件内容如下:
export const environment = { production: true, featureAEnabled: false, };
在组件中编写了如下代码:
if (environment.featureAEnabled) { // Doing stuff }
解答
这取决于你使用的打包工具及开启的优化等级:
- 生产环境打包(比如Angular项目执行
ng build --prod):打包工具会启用Tree Shaking和死代码消除机制。由于environment.featureAEnabled是编译阶段就能确定值的常量(固定为false),整个if代码块会被判定为永远不会执行的死代码,不会被包含在最终的打包文件里。 - 开发环境打包:默认优化程度较低,为了便于调试,这段未执行的代码通常会被保留在打包产物中。
额外说明:如果featureAEnabled不是编译时常量(比如是运行时动态赋值的变量),打包工具无法提前识别它的执行可能性,会将这段代码保留在最终文件里。
内容的提问来源于stack exchange,提问作者Mackelito
相关产品推荐
相关产品推荐

