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

时间:2019-09-10 16:13:16

标签: node.js angular webpack angular-cli

我已经设法将我的角度应用程序开发为开发版本。我尚未将其作为生产版本完成,因为它给了我一些错误,我只需要测试开发版本。

开发人员的构建过程可以正常进行,没有任何错误。然后,我使用Nginx docker容器中dist文件夹中的文件来托管文件。

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

enter image description here

我尝试了一些不同的操作,例如运行“ npx ivy-ngcc”,我手动阅读该文件会编译一些东西。无论如何,我是否可以获得有关该错误的更多详细信息,以查看是否已完成此操作?

更新 所以我恢复了在main.ts中注释掉的行,如下面的注释中所述。我还按照建议尝试了“ ng build --aot”,这给了我一系列错误,这些错误似乎都与使用的devextreme组件有关。当我使用来自github的devextreme角启动器项目启动该项目时,我感到很奇怪。

我收到如下消息:

  1. 'dx-scroll-view无效的HTML元素'

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

8 个答案:

答案 0 :(得分:10)

enter image description here

如果您进入devtools并单击Sources,请“不要在异常上暂停”,然后选中“在捕获的异常后暂停”,然后继续操作,直到获得“ id错误”,您将找到引发该错误的模块。在我的案例中,有一个名为“ ngx-card / ngx-card”的第三方库,其模块是错误的原因(CardModule)。希望这将有助于至少找到错误的原因

enter image description here

答案 1 :(得分:2)

在您的Angular项目的 <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" type="text/css" href="Hero Battle Arena.css" /> <link rel="icon" href="favicon.png"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <meta charset="UTF-8"> <title>Worlds Apart</title> </head> <body class="bg-color"> //STUFF THAT ISN'T IMPORTANT <script src="Hero Battle Arena.js"></script> <script src="Hero Battle Arena(game).js"></script> </body> </html>中,将其禁用以禁用新的Angular模板引擎Ivy

1 aa cc vv bb bb bb   ss   ff ff ff ff > from table 1

1 aa ss ff re df dfsd sfsd ss          > from table 2

2 aa cc vv bb bb bb   ss   ff ff ff ff > from table 1

2 aa ss ff re df dfsd sfsd ss          > from table 2

答案 2 :(得分:1)

我设法通过在角度编译选项中禁用常春藤来解决该问题。我一完成,它就可以同时构建开发版本和生产版本,并且现在在Nginx中可以完美地工作。

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

答案 3 :(得分:0)

通常,如果这不是您写的内容,则通常会与您的实现方式有关-即“拜访食品供应商并订购他们不提供的食品”。

我知道这不是一个具体的答案,但是确保在app.module中正确配置了东西是一个不错的第一步。也许尝试通过AOT进行构建也会给您带来一些更多的失败源于尝试构建的失败。

答案 4 :(得分:0)

希望这可以帮助另一个可怜的灵魂。

对于使用devextreme的任何人,请确保将您的版本至少更新为19.2.5

https://github.com/DevExpress/devextreme-angular/issues/975#issuecomment-580172291

从19.2.5版本开始,我们支持IVY编译器。

答案 5 :(得分:0)

我遇到了相同的问题,并通过将其更改为

loadChildren: './app/page/account/account.module#AccountModule'

loadChildren: () =>
  import('./app/page/account/account.module').then(
    (m) => m.AccountModule
  )

app-router.module.ts

答案 6 :(得分:0)

错误的根本原因很可能是您需要显式加载但不需要加载的模块,或者是您自己的模块中的循环引用。 Rodrigo的答案很好,但更具体地说,您需要在Angular的registerNgModuleType中找到core.js函数,并在第一行上设置条件断点。条件应为!ngModuleType || !ngModuleType.ɵmod。 (您可以在大多数现代浏览器中通过右键单击行号来设置条件断点。)

一旦您在异常发生之前暂停了执行,就可以查看ngModuleType的值(如果它不是未定义的),或者在作用域中向上移动一两个帧,然后查看{{ 1}}。

答案 7 :(得分:0)

对我来说,这个问题是在使用Storybook时发生的。

它发生的原因是由于我预编译节点模块的方式。我在做:

不正确

ngcc --properties es2015 browser module main --first-only

正确

ngcc

使用此方法进行修复