Angular 10 库和 IVY/ngcc 兼容性

Mat*_*man 14 javascript typescript angular angular-ivy

我有一个需要通过 npm 分发的库。Angular 10 的建议似乎仍然是这样的库应该在禁用 IVY 的情况下编译,但 Angular CLI 将确保该库仍然与启用 IVY 的应用程序兼容。

使用我的库,如果我使用 IVY 构建它,它会按预期工作。然而,如果我在构建时禁用 IVY,当我导入库时,我会收到以下错误:

node_modules/@me/my-module/lib/my-module.module.d.ts:1:22 中的错误 - 错误 NG6002:出现在 AppModule 的 NgModule.imports 中,但无法解析为 NgModule 类。

这可能意味着声明 MeMYModule 的库 (@me/my-module) 没有被 ngcc 正确处理,或者与 Angular Ivy 不兼容。检查是否有更新版本的库可用,如果有则更新。还可以考虑与库的作者核对以查看该库是否与 Ivy 兼容。

我错过了什么吗?我发现了很多类似的问题,但似乎没有一个解决方案有效。

小智 15

几天前我遇到了类似的问题。我通过在我的package.json文件中添加以下脚本来解决它。

"scripts": {
    "postinstall": "ngcc"
  }
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于 Angular 16,我得到: 警报:从 Angular 16 开始,不再需要“ngcc”,并且在 CLI 构建期间不再调用。您看到此消息是因为当前操作直接调用了“ngcc”命令。可以安全地删除此“ngcc”调用。出现这种情况的一个常见原因是从 package.json 中的“postinstall”挂钩调用“ngcc”。在 Angular 17 中,该命令将被删除。删除此调用和任何其他调用以防止更高版本中出现错误。 (6认同)
  • 面对同样的问题,我尝试启用 Ivy,但没有成功构建我的库。我们将“postinstall”添加到库的包或应用程序的包中吗?我尝试了两者,但仍然有相同的错误:/ (2认同)

Sun*_*tom 5

几天前我遇到了类似的问题,将 Fluuterwave 集成到 Angular 16 项目中,显示了此错误

flutterwave.module.d.ts(1, 22):这可能意味着声明 FlutterwaveModule 的库 (flutterwave-angular-v3) 与 Angular Ivy 不兼容。检查该库是否有新版本可用,如果有则更新。还可以考虑与库的作者联系,看看该库是否与 Ivy 兼容。

我通过在 package.json 文件中添加以下脚本解决了这个问题。

    {
      ...
      "scripts": {
        ...
        "postinstall": "npx --package @angular/compiler-cli@15.2.9 --yes ngcc",
        ...
       },
       ...
    }
Run Code Online (Sandbox Code Playgroud)