这是我在Angular / TypeScript应用程序中遇到的一个无用的错误 . 在有人更好地提出错误消息之前,我们可以做些什么呢?导致这种情况发生的最可能的情况是什么?
Uncaught Error: Encountered undefined provider! Usually this means you have a circular dependencies (might be caused by using 'barrel' index.ts files.
at Object.syntaxError
at eval at Array.forEach (native) [<root>]
at CompileMetadataResolver._getProvidersMetadata
at CompileMetadataResolver.getNgModuleMetadata
at CompileMetadataResolver.getNgModuleSummary
at eval
...
7 回答
一种可能性是尝试在同一文件中声明服务和模块,并在服务之前声明模块:
您可以通过首先声明服务来解决此问题,或者您可以像这样使用forwardRef:
从错误消息中很难判断哪个提供程序导致此问题 . 我设法调试它的方式如下:
我进入了node_modules \ @angular \ compiler \ bundles \ compiler.umd.js文件
我找到了它所说的行:"Encountered undefined provider! Usually this means you have a circular dependencies. This might be caused by using 'barrel' index.ts files."
在添加"console.log('type', type);"之前的一行,以便查看哪个文件是未定义的提供程序(您还可以在其中控制日志其他相关变量) .
在相关文件中,我发现导致该问题的'barrel'导入,并将其替换为精确文件路径导入 .
检查模块是否可以找到您提到的服务 .
在我的情况下,我从
guards
文件夹导出guard
. 该文件夹包含一个index.ts文件 . 此guards
文件夹auth.guard.ts
和company.guard.ts
中还有两个文件 . 理想情况下,我在索引中的这些文件如下:guards/index.ts 的内容
但是我忘了在
company.guard.ts
之外的那条出口上面加上一行 . 这造成了问题 .错过导入以覆盖角度类时,我收到此错误 . 我想错误导入也可能以其他方式导致错误 .
在我的情况下,我没有
File
的import语句,它默认为File接口,这不是我想要的 . 添加import { File } from "@ionic-native/file"
修复了问题 .我还控制台在node_modules \ @angular \ compiler \ bundles \ compiler.umd.js文件中记录了值 right before the error message 语句 .
并检查 Document interface 是 component 中的
company.guard.ts
,这是根本原因 .我 removed it to fix 这个问题 .
运行了这个错误--prod .
你不能导入这样的东西:
您应该使用完整路径
在我的情况下我改变了这一点
至