创建一个 Ahead-of-Time (AOT) 编译库供 Angular 个应用程序使用
Create an Ahead-of-Time (AOT) compiled library to be consumed by Angular applications
我有一个 Angular 5 库,我将它公开为一个包,供其他应用程序从它们的 node_modules
使用。
目前,该应用程序使用 rollup
和 gulp
进行即时 (JIT) 编译,并作为包导出。因此开发人员应用程序以他们的 JIT 编译形式使用我的包。
对 AOT 的研究使我相信,任何 Angular 应用程序在 AOT 编译时都比浏览器上的 JIT 对应程序具有更高的性能。但是,作为库开发人员,我想知道如果我公开 AOT 编译的库,应用程序开发人员是否会获得任何性能优势?
我使用 ng-bootstrap
和许多其他开源库在我的模块中创建组件并在它们之上添加自定义样式或功能。我在模块中使用的所有库是否也需要采用 AOT 形式,或者我可以使用它们的 JIT 对应形式?
此外,我认为为我的库提供单独的包是个好主意 - packageName
和 packageName-aot
以便用户可以选择他们想要使用的任何库。
除了整个代码重构(将模板中使用的私有变量更改为public,删除箭头函数,lambda表达式等),在公开我的代码之前还有什么需要注意的吗? AOT 形式的库模块?
由于某些限制,我无法使用 Angular CLI,因此必须依赖 @ngtools/webpack
才能获得 AOT 编译。
目前,我的tsconfig.json
有以下选项:
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMedtadataEmit": true,
"fullTemplateTypeCheck": true
}
我在 Internet 上搜索了很多,但是 Angular AOT 文档非常模糊,对于我在这里尝试做的事情不是很清楚。任何方向都会很有帮助。
谢谢!
您编写的库以及您的库所依赖的库需要支持 AOT。这真的就是它的全部。
您不编写和交付 AOT 编译的库(AOT 编译形式,如您所说);消费应用程序将在构建时进行 AOT 编译。
您必须做的就是确保当消费应用程序执行 AOT 构建时(ng build --prod
如果使用 Angular CLI),您的图书馆很好玩。 玩得很好 我的意思是,您的库可以使用消费应用程序进行 AOT 编译而不会出现错误。
generator-angular2-library, or ng-packagr (which is a tool the @angular/cli 6.0.0 等库工具用于支持构建库)只是将包构建到 JavaScript,仅此而已。
AOT 构建取决于消费应用程序的构建工具。这就是允许任何需要它的应用程序(或应用程序 framework/library)使用库的原因。尽量不要想太多 build/deploy 一个图书馆需要什么。 AOT 的繁重工作取决于使用它的应用程序。
我有一个 Angular 5 库,我将它公开为一个包,供其他应用程序从它们的 node_modules
使用。
目前,该应用程序使用 rollup
和 gulp
进行即时 (JIT) 编译,并作为包导出。因此开发人员应用程序以他们的 JIT 编译形式使用我的包。
对 AOT 的研究使我相信,任何 Angular 应用程序在 AOT 编译时都比浏览器上的 JIT 对应程序具有更高的性能。但是,作为库开发人员,我想知道如果我公开 AOT 编译的库,应用程序开发人员是否会获得任何性能优势?
我使用 ng-bootstrap
和许多其他开源库在我的模块中创建组件并在它们之上添加自定义样式或功能。我在模块中使用的所有库是否也需要采用 AOT 形式,或者我可以使用它们的 JIT 对应形式?
此外,我认为为我的库提供单独的包是个好主意 - packageName
和 packageName-aot
以便用户可以选择他们想要使用的任何库。
除了整个代码重构(将模板中使用的私有变量更改为public,删除箭头函数,lambda表达式等),在公开我的代码之前还有什么需要注意的吗? AOT 形式的库模块?
由于某些限制,我无法使用 Angular CLI,因此必须依赖 @ngtools/webpack
才能获得 AOT 编译。
目前,我的tsconfig.json
有以下选项:
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMedtadataEmit": true,
"fullTemplateTypeCheck": true
}
我在 Internet 上搜索了很多,但是 Angular AOT 文档非常模糊,对于我在这里尝试做的事情不是很清楚。任何方向都会很有帮助。
谢谢!
您编写的库以及您的库所依赖的库需要支持 AOT。这真的就是它的全部。
您不编写和交付 AOT 编译的库(AOT 编译形式,如您所说);消费应用程序将在构建时进行 AOT 编译。
您必须做的就是确保当消费应用程序执行 AOT 构建时(ng build --prod
如果使用 Angular CLI),您的图书馆很好玩。 玩得很好 我的意思是,您的库可以使用消费应用程序进行 AOT 编译而不会出现错误。
generator-angular2-library, or ng-packagr (which is a tool the @angular/cli 6.0.0 等库工具用于支持构建库)只是将包构建到 JavaScript,仅此而已。
AOT 构建取决于消费应用程序的构建工具。这就是允许任何需要它的应用程序(或应用程序 framework/library)使用库的原因。尽量不要想太多 build/deploy 一个图书馆需要什么。 AOT 的繁重工作取决于使用它的应用程序。