升级Angular 8至9后出现CompilerFactory无提供者错误求助
解决Angular 8升级到9后出现的NullInjectorError: No provider for CompilerFactory!
我之前从Angular 8升级到9的时候,完完全全碰到过这个一模一样的错误!当时折腾了好一会儿才搞定,给你分享几个亲测有效的解决步骤:
1. 先统一Angular核心依赖的版本
这个错误最常见的原因就是升级后部分Angular包版本不一致(比如@angular/core还是8.x,但@angular/compiler已经是9.x)。你可以先检查一下当前依赖版本:
npm list @angular/core
如果输出里有不同版本的Angular包,赶紧把核心依赖统一升级到9.x:
npm install @angular/core@9 @angular/compiler@9 @angular/platform-browser-dynamic@9 --save
2. 检查Angular的编译配置(Ivy相关)
Angular 9默认启用了Ivy编译器,要是你的配置里不小心禁用了或者配置错了,也会触发这个错误:
- 打开
angular.json,找到projects -> [你的项目名] -> architect -> build -> options - 确保
enableIvy设置为true,或者直接删掉这个配置(因为Angular 9默认启用Ivy) - 同时检查
aot配置,设置为true试试
3. 彻底清理缓存和依赖
升级后残留的缓存和旧依赖文件很容易搞出问题,按这个顺序操作:
# 删除node_modules和锁文件 rm -rf node_modules rm package-lock.json # 重新安装依赖 npm install # 清理Angular CLI缓存 ng cache clean # 或者旧版本CLI用这个:ng clean # 重新构建项目 ng build
4. 排查第三方库兼容性问题
如果上面的步骤都没用,大概率是某个第三方库还没兼容Angular 9的Ivy编译器。你可以先临时禁用Ivy试试:
- 打开
tsconfig.json,在angularCompilerOptions里添加:"enableIvy": false - 然后重新启动项目,如果能正常运行,就去排查你用的第三方库,把它们更新到支持Angular 9的版本,之后再重新启用Ivy。
你的main.ts代码看起来是完全正常的,不用改它,问题基本都出在依赖或配置上,按上面的步骤一步步来应该就能解决!
内容的提问来源于stack exchange,提问作者Hwang
相关产品推荐
相关产品推荐

