Angular 10 库和 IVY/ngcc 兼容性

18

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

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

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

这通常意味着声明MeMYModule的库(@me / my-module)没有被ngcc正确处理,或者与Angular Ivy不兼容。检查是否有该库的更新版本,并进行更新。同时考虑与库的作者联系以了解该库是否预计与Ivy兼容。

我漏掉了什么吗?我找到了许多类似的问题,但似乎没有一个解决方案适用于我。


我删除了 node_modules 并运行了 npm install - Vahid
2个回答

21

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

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

"scripts": {
    "postinstall": "ngcc"
  }

1
你甚至可以运行 npm run postinstall 来尝试确定它是否有效。 - JoeCool-Avismón
2
面对同样的问题,我尝试启用Ivy来构建我的库,但没有成功。我们应该将postinstall添加到库的包中还是应用程序中?我两种方式都尝试了,但仍然出现相同的错误 :/ - Thibaud Renaux
5
这在Angular 16中不起作用。我得到的是:警告:从Angular 16开始,在CLI构建过程中不再需要使用"ngcc",也不会调用它。您看到此消息是因为当前操作直接调用了"ngcc"命令。可以安全地删除此"ngcc"调用。 通常的原因是在package.json的"postinstall"钩子中调用"ngcc"。 在Angular 17中,将删除此命令。请删除此命令和任何其他调用,以防止在后续版本中出现错误。 - MadMac

4

我几天前遇到了类似的问题,在一个 Angular 16 项目中集成 Flutterwave,出现了以下错误:

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",
        ...
       },
       ...
    }

这个解决方案对我有效,因为我在Angular 16中遇到了与flutterwave-v3完全相同的情况。在添加postinstall脚本后,不要忘记重新运行 "npm install"。 - xodeeq
你能在你的Angular 16应用程序中调用Flutterwave服务时解决空值注入错误吗?你的修复确保我的应用程序在构建时不会崩溃,但它仍然崩溃,因为Flutterwave服务不是"Ivy兼容"。 错误信息:NullInjectorError: R3InjectorError(AppModule)[Flutterwave -> Flutterwave]: NullInjectorError: No provider for Flutterwave! - xodeeq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接