库构建因Angular 9而失败 [英] Library build fails with Angular 9
问题描述
我正在尝试迁移该库
所做的更改如下:
package.json $中的更改c $ c>无关紧要。
enableIvy:false
意味着您的库将不会使用Ivy Rendering引擎构建(目前建议将其用于库),但不会阻止您的库在已启用Ivy的应用程序中使用。
需要注意的一点是IVY仍处于实验模式
annotateClosureCompiler:假
:与此问题相关 https://github.com/angular/angular/pull/26738
I am trying to migrate this library https://github.com/flauc/angular2-notifications from Angular 2+ to Angular 9.
The original error was about the ModuleWithProviders
that has become a generic type, so I fixed it. I also had an error described here https://github.com/angular/angular/issues/32352 which i fixed with require('@angular/compiler-cli');
and now I'm facing another error:
../node_modules/@angular/common/common.d.ts:115:22 - error NG6002: Appears in the NgModule.imports of SimpleNotificationsModule, but could not be resolved to an NgModule class
It's pretty hard for me to understand what's going on since I've never built a library before, and the build with gulp appears to be kinda hacky, since this line ngc = require('@angular/compiler-cli/src/main').main
refers to a function that does not belong to the public API.
Edit:
Following the idea in the comments (and my own feeling), I tried to build without gulp:
- Created a
angular.json
file - Separated
index.ts
intopublic_api.ts
andsimple-notifications.module.ts
- Did some changes in the files and folders structure
But I still have the same exact error...
My attempt: https://github.com/youkouleley/angular2-notifications
I try to build this with ng build
, the scripts in package.json
have not been updated
EDIT 2
Now that Angular 9 is released:
https://angular.io/guide/creating-libraries#publishing-your-library
It is not recommended to publish Ivy libraries to NPM repositories. Before publishing a library to NPM, build it using the --prod flag which will use the older compiler and runtime known as View Engine instead of Ivy.
EDIT
https://next.angular.io/guide/ivy
If you are a library author, you should keep using the View Engine compiler as of version 9. By having all libraries continue to use View Engine, you will maintain compatibility with default v9 applications that use Ivy, as well as with applications that have opted to continue using View Engine.
See the Creating Libraries guide for more on how to compile or bundle your Angular library. When you use the tools integrated into the Angular CLI or ng-packagr, your library will always be built the right way automatically.
I managed to get this working by making some alterations from the repo you posted of your attempt. Screenshot below:
The changes made were as follows:
The changes in package.json
are irrelevant.
enableIvy:false
means that your library will not be built with the Ivy Rendering engine (this is currently recommended for libraries), but doesn't prevent your library from being used in an Ivy enabled app.
Word of note that IVY is still in somewhat of an experimental mode
annotateClosureCompiler: false
: Is related to this issue https://github.com/angular/angular/pull/26738
这篇关于库构建因Angular 9而失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!