Angular 8升级到9后报No provider for kf found in NodeInjector错误如何解决
错误解决步骤
- 先定位实际缺失的依赖:
kf是Angular9开启Ivy编译+代码混淆后生成的类缩写名,没有实际含义。你需要先修改angular.json配置,关闭构建优化和开启sourcemap:找到对应构建配置下的optimization字段设为false,sourceMap字段设为true,重新运行项目,此时控制台会输出真实的缺失类名,方便定位问题。 - 检查依赖注入配置:拿到真实类名后,确认该类是否添加了
@Injectable({ providedIn: 'root' })注解,或者是否被手动加入到对应NgModule的providers数组中。Angular9的Ivy编译对DI校验更严格,Angular8中可以隐式生效的部分注入规则在9版本会直接抛出错误。 - 验证第三方依赖兼容性:如果缺失的类来自第三方依赖库,确认该依赖是否发布了兼容Angular9的版本,大部分未适配Ivy的低版本第三方库都会出现类似注入错误。如果暂时无法升级依赖,可以在
tsconfig.json的angularCompilerOptions中加入"enableIvy": false,关闭Ivy编译验证。 - 清理旧缓存重新安装依赖:删除项目根目录下的
.angular缓存文件夹、node_modules文件夹、以及package-lock.json或yarn.lock文件,重新执行npm install安装依赖后启动项目,排除旧版本编译缓存引发的异常。 - 排查废弃API使用:检查项目中是否使用了Angular9已移除的DI相关废弃API,比如旧版
ReflectiveInjector相关调用,替换为Angular9支持的Injector.create写法即可。
内容的提问来源于stack exchange,提问作者Tushar Chakraborty
相关产品推荐
相关产品推荐

