【发布时间】:2022-04-16 10:15:26
【问题描述】:
是的,在 SO 上出现了几十个类似的问题,这就是问题所在。它们都太笼统了以至于没有用。我了解此错误的含义,但希望有人可以帮助我在某个地方找到它的“原因”。
我有一个使用 CLI 生成的 Angular 7 应用程序,并且在加载我的一个模块时遇到了这个错误。无论模块是同步加载还是延迟加载,都会发生这种情况。
明显的根本原因是无法解决模块依赖关系。事实上,我已经逐步完成了@angular/core 中的模块依赖解析代码(很有趣,我会告诉你),并发现在失败点,用于解析模块依赖的注入令牌类似于“undefined_348”,而不是“Router_43”或类似的。
未定义的标记出现在与我编写的服务相对应的其他标记附近,所以我很确定我做错了什么,或者没有做我应该做的事情。但是,我有另一个模块可以注入相同的依赖项并且可以正确加载。我希望有人在相同的上下文中看到了这个错误,并且可以提供有关如何找到任性依赖项的线索。
ERROR Error: Uncaught (in promise): TypeError: Cannot read property
'hasOwnProperty' of undefined
TypeError: Cannot read property 'hasOwnProperty' of undefined
at getInjectableDef (core.js:120)
at resolveNgModuleDep (core.js:19748)
at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:20452)
at injectInjectorOnly (core.js:1173)
at inject (core.js:1178)
at injectArgs (core.js:1230)
at core.js:14376
at _callFactory (core.js:19825)
at _createProviderInstance (core.js:19783)
at resolveNgModuleDep (core.js:19758)
at resolvePromise (zone.js:814)
at resolvePromise (zone.js:771)
at zone.js:873
. . .
顺便说一句,如果@angular/core 最终生成这样的“未定义”注入令牌,它肯定会更早地失败,所以我愿意接受任何可能有帮助的上游解决方案。
Angular CLI: 7.0.6
Node: 8.11.3
OS: linux x64
Angular: 7.1.0
... animations, cdk, common, compiler, compiler-cli, core, forms
... http, language-service, material, platform-browser
... platform-browser-dynamic, router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.10.6
@angular-devkit/build-angular 0.10.6
@angular-devkit/build-optimizer 0.10.6
@angular-devkit/build-webpack 0.10.6
@angular-devkit/core 7.0.6
@angular-devkit/schematics 7.0.6
@angular/cli 7.0.6
@ngtools/webpack 7.0.6
@schematics/angular 7.0.6
@schematics/update 0.10.6
rxjs 6.3.3
typescript 3.1.6
webpack 4.19.1
【问题讨论】:
-
也许您忘记在您的一项服务上使用 @Injectable 装饰器。很难用这样一个通用的错误消息来判断。您是否已经编写了自定义错误处理程序?也许这样您就可以更好地记录错误。
-
如果可能的话,也试着让你的 tsconfig 更严格。也许你有一个非常宽容的配置导致重要的警告被忽略。
-
@enf0rcer 感谢您的回复。不幸的是,错误非常模糊。以至于完全没用。我已经按照您的建议安装了一个自定义错误处理程序,但它只是捕获相同的信息,没有其他可用的上下文。我还仔细检查了我所有的注射剂是否有正确的注释,它们都存在。我想我会继续寻找。
-
所以是时候尝试务实的方法了。尝试一一移除此失败模块的依赖关系或使用 50% 方法。删除 50% 的依赖项,然后重新构建应用程序以查看它是否构建。这样您就可以找到导致问题的依赖项。
-
在您的应用模块中提供包括第三方服务在内的所有使用服务,可能存在未提供的服务。我们也有同样的问题。经过太多的排查,我们发现我们没有在应用模块中提供LocalStorage和AlertService。