Angular 16模块中未使用的组件会被Tree Shaking从打包文件移除吗?
Angular 9+(Ivy 编译)下的组件 Tree Shaking 规则
- 模板未用的组件会被自动移除:从Angular 9启用Ivy作为默认编译引擎后,配合Angular CLI的webpack构建流程,能精准识别组件的实际使用场景。如果你的业务模块导入了
SharedModule,但既没在模板里用某个导出组件,也没在代码里显式引用(比如动态创建实例),这个组件的代码会被从最终打包产物里剔除。 - 仅模块导入不会强制打包组件:Ivy的局部编译特性会追踪每个组件的依赖链路,不会因为
SharedModule被导入就打包所有导出内容。只有组件被模板直接引用(比如写了<app-xxx>标签),或者在代码中被主动调用时,才会被包含进打包文件。 - 无需盲目拆分
SharedModule:除非你的SharedModule包含上百个组件,且不同业务模块的组件使用差异极大,否则没必要刻意拆分成多个小模块。当前的Tree Shaking机制已经足够智能,能覆盖绝大多数场景下的未用代码清理。
内容的提问来源于stack exchange,提问作者Maxime Dupré
相关产品推荐
相关产品推荐

