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:
angular.json
fileindex.ts
into public_api.ts
and simple-notifications.module.ts
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