开发者问题收集

Angular Build-未捕获的 TypeError:无法读取未定义的属性“id”

2019-09-10
14909

我已成功将我的 angular 应用构建为开发版本。我尚未将其构建为生产版本,因为它会给我一些错误,我只需要测试开发版本。

开发构建过程进展顺利,没有任何错误或任何问题。然后,我使用 nginx docker 容器中 dist 文件夹中的文件来托管文件。

问题是除了白页之外什么都没有显示,并且在控制台中我收到一条错误消息,提示“未捕获 TypeError:无法读取未定义的属性‘id’”。下面的完整消息似乎与我写的任何内容无关,我花了几个小时在网上搜索,但找不到有关此问题的任何信息。

在此处输入图像描述

我尝试了一些不同的方法,例如运行“npx ivy-ngcc”,我读到它手动编译了一些东西。有没有什么方法可以让我获得有关错误的更多详细信息,看看是否是我做的?

更新 因此,我已恢复了我在 main.ts 中注释掉的行,如下面评论中所述。我还尝试了建议的“ng build --aot”,它向我展示了一系列错误,这些错误似乎都与使用的 devextreme 组件有关。我发现这很奇怪,因为我使用来自 github 的 devextreme angular starter 项目启动了该项目。

我收到如下消息:

  1. “dx-scroll-view 不是有效的 HTML 元素”

  2. “node_modules/devextreme-angular/ui/drawer.d.ts - 错误:出现在 SideNavOuterToolbarModule 的 NgModule.imports 中,但无法解析为 NgModule 类”

3个回答

在此处输入图片描述

如果您进入 devtools 并单击“Sources”、“Don't pause on exceptions”并选中“Pause on caught expecptions”并继续,直到您得到“id error”,您将找到抛出错误的模块。在我的情况下是一个名为“ngx-card/ngx-card”的第三方库,它的模块是导致错误的原因(CardModule)。希望这至少有助于找到错误的原因

在此处输入图像描述

digoburigo
2020-03-16

我设法通过在 angular 编译选项中禁用 ivy 解决了该问题。我这样做后,它立即在构建开发和生产版本时起作用,并且现在在 Nginx 中完美运行。

感谢所有提供帮助的人 :)

user7856951
2019-09-12

在 Angular 项目的 tsconfig.json 中,输入以下内容以禁用新的 Angular 模板引擎 Ivy

{
  ...
  "angularCompilerOptions": {
    "enableIvy": false
  }
}
tom10271
2020-04-21