2026-04-12 22:14:49
Angular Package Format (APF) v12.0 是用于分发 Angular 组件和核心框架包的标准化结构规范,旨在支持多种开发工具和工作流,同时优化构建性能与包体积。 该格式与 Angular 版本控制同步演进,强调向前兼容性,适用于 @angular 命名空间下的核心包(如 @angular/core)及第三方组件库(如 Angular Material)。以下是其核心要点:
1. 设计目的
@angular/core 的所有相关符号(如 Component、 Injecatable)捆绑为单个 FESM 文件。
第三方库(如 Angular Material)按组件或功能模块分组,每个 NgModule 对应一个 FESM 文件。

@angular/core/testing 包含测试专用符号,通过独立目录和 package.json 定向加载。
用户通过次要入口导入:
import { TestBed } from '@angular/core/testing';使用 Angular 编译器(ngc)生成构建工件,推荐 tsconfig.json 配置:
{ "compilerOptions": { "declaration": true, "module": "es2015", "target": "es2015" }, "angularCompilerOptions": { "strictMetadataEmit": true, "skipTemplateCodegen": true, "flatModuleOutFile": "my-ui-lib.js", "flatModuleId": "my-ui-lib" }}flatModuleOutFile:指定 FESM 输出文件名。
strictMetadataEmit:确保元数据严格生成,兼容 AOT 编译。
FESM 扁平化通过 Rollup 等工具将多个 ES 模块合并为单个文件,减少构建时的模块解析开销。例如:
输入:多个 import 语句分散的模块。
输出:单个 fesm2015/my-lib.js 文件,包含所有导出符号。
模板与样式内联将组件的 templateUrl 和 styleUrls 替换为内联属性,简化用户使用:
@Component({ template: `<div>Inline HTML</div>`, styles: [`div { color: red; }`]})依赖管理自 APF v10 起,建议显式声明 tslib 为直接依赖,确保 TypeScript 运行时辅助函数版本兼容。
APF v12.0 通过标准化文件布局、入口点管理和优化策略,为 Angular 生态提供了高效的包分发方案。其核心优势包括:
开发者应遵循 APF 规范构建库,以充分利用 Angular 的优化机制和工具支持。