使用 Angular 9 构建库失败 [英] Library build fails with Angular 9

查看:19
本文介绍了使用 Angular 9 构建库失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试迁移这个库

所做的更改如下:

package.json 中的更改无关紧要.

enableIvy:false 表示您的库不会使用 Ivy 渲染引擎构建(目前推荐用于库),但不会阻止您的库在启用了 Ivy 的应用程序中使用.

值得注意的是,IVY 仍处于某种实验模式

annotateClosureCompiler: false:与此问题有关 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 into public_api.ts and simple-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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆