库构建因Angular 9而失败

时间:2019-10-20 13:28:17

标签: angular gulp angular-library angular-ivy angular9

我正在尝试将此库https://github.com/flauc/angular2-notifications从Angular 2+迁移到Angular 9。

最初的错误与ModuleWithProviders有关,它已成为通用类型,因此我对其进行了修复。我在这里https://github.com/angular/angular/issues/32352中也遇到了一个错误,该错误已由require('@angular/compiler-cli');修复,现在我面临另一个错误:

  

../ node_modules/@angular/common/common.d.ts:115:22-错误NG6002:   出现在SimpleNotificationsModule的NgModule.imports中,但是   无法解析为NgModule类

由于我以前从未构建过库,因此很难理解正在发生的事情,并且使用gulp进行构建似乎有点黑,因为此行ngc = require('@angular/compiler-cli/src/main').main引用了一个不属于该函数的函数公开API。

编辑:

按照评论中的想法(和我自己的感觉),我尝试在没有吞咽的情况下进行构建:

  • 创建了一个angular.json文件
  • index.ts分为public_api.tssimple-notifications.module.ts
  • 文件和文件夹结构进行了一些更改

但是我仍然有相同的确切错误...

我的尝试:https://github.com/youkouleley/angular2-notifications 我尝试使用ng build构建它,package.json中的脚本尚未更新

2 个答案:

答案 0 :(得分:1)

编辑

https://next.angular.io/guide/ivy

  

如果您是库作者,则应从版本9开始继续使用View Engine编译器。通过让所有库继续使用View Engine,您将与使用Ivy的默认v9应用程序以及应用程序保持兼容性。选择继续使用View Engine的人。

     

有关如何编译或捆绑Angular库的更多信息,请参见Creating Libraries指南。使用集成到Angular CLI或ng-packagr中的工具时,将始终以正确的方式自动构建您的库。


我通过对您发布的尝试中的回购进行了一些更改来设法使此工作正常进行。 下面的屏幕截图:

terminal output

所做的更改如下: enter image description here

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

enableIvy:false意味着您的库不会使用Ivy Rendering引擎构建(当前建议用于库),但是不会阻止您的库在启用Ivy的应用程序中使用。

IVY仍处于实验模式的提示

annotateClosureCompiler: false:与此问题https://github.com/angular/angular/pull/26738

有关

答案 1 :(得分:0)

我弄清楚出了什么问题,我有一个Angular 8项目(包含一个库项目),我已经升级到了Angular 9(还有一个lib:ng generate library core,我首先创建了一个新的angular 9项目来将差异与我用ng 8进行的项目进行比较,我发现缺少一些东西,这是我遵循的步骤: -删除node_modules -删除dist文件夹 -在Angular 9项目库中,有一个名为tsconfig.lib.prod.json

的新文件。
{
  "extends": "./tsconfig.lib.json",
  "angularCompilerOptions": {
    "enableIvy": false
  }
}
  • 在您的angular.json中添加以下内容:
{
  ...
  "projects": {
     ...
     "configurations": {
            "production": {
              "tsConfig": "projects/core/tsconfig.lib.prod.json"
             }
      }
  ...
  }
}
  • 运行ng build --prod,一切都会运行:D

PS:在这种情况下,该库称为“核心”