4

我正在尝试将此库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 构建似乎有点 hacky,因为这一行ngc = require('@angular/compiler-cli/src/main').main引用了一个不属于公共 API 的函数。

编辑:

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

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

但我仍然有同样的错误......

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

4

2 回答 2

6

编辑 2

现在 Angular 9 发布了:

https://angular.io/guide/creating-libraries#publishing-your-library

不建议将 Ivy 库发布到 NPM 存储库。在将库发布到 NPM 之前,使用 --prod 标志构建它,该标志将使用称为 View Engine 的旧编译器和运行时而不是 Ivy。


编辑

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

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

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


我设法通过对您发布的尝试进行的回购进行一些更改来使这项工作正常进行。截图如下:

终端输出

所做的更改如下: 在此处输入图像描述

中的变化package.json无关紧要。

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

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

annotateClosureCompiler: false:与这个问题有关https://github.com/angular/angular/pull/26738

于 2019-10-22T21:51:26.393 回答
0

我发现出了什么问题,我有一个 Angular 8 项目(包含一个库项目),我已经升级到 Angular 9(还有一个库: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:在这种情况下,图书馆被称为“核心”

于 2020-02-14T08:06:38.010 回答