没有 'ɵmod' 属性 错误

Does not have 'ɵmod' property errors

我已经卡在这个问题上一天了。

在一个干净的 repo 上,在执行 pnpm 安装后,然后执行 ng 服务,您最终会在控制台中出现此错误

...does not have 'ɵmod' property

任何模块都可能发生这种情况,下面的解决方法适用于任何模块。注意:如果您导入的不是模块,也会发生这种情况 - 在这种情况下我的导入没有任何问题。

解决方法:

  1. 重新启动 ng serve 运行 ng build 两次
  2. 参见 ngx-leaflet-draw: Importing module which does not have a ɵmod property(但我无法让 ngcc 实际执行任何操作 - 所以这对我不起作用 - 值得指出的是我的回购协议有多个项目)

虽然这些变通办法可能适用于开发环境,但在 CI 环境中,您基本上必须使用 ng build 两次才能解决该问题(这是有代价的)。

我目前在 CI 构建中的解决方案是构建两次(告诉编译器很可怕,如果你第一次没有做对,再试一次...)

你是如何找到这个问题的根本原因的? (所以我可以在我的 CI 构建中有一个 ng 构建步骤)。

我的问题是我使用 pnpm 作为包管理器。不幸的是,pnpm 似乎不能很好地与 ngcc 配合使用——pnpm 在 node_modules 文件夹中使用硬链接。我有 raised an issue 和 pnpm。

事实证明,pnpm 也会导致以下问题(所有问题都可以通过 运行 ng serve 或 build 重新修复):

  • TypeError: 无法读取 null
  • 的 属性 'bindingStartIndex'
  • 构建期间发生错误:错误:试图用 ngcc 备份文件覆盖...__ivy_ngcc_bak,这是不允许的