运行ng deploy时出现NOT SUPPORTED: keyword 'id'错误,寻求解决方案
解决Angular
ng deploy时的NOT SUPPORTED: keyword "id", use "$id" for schema ID错误 这个问题我之前帮朋友排查过,本质是Angular CLI 13依赖的Ajv(JSON Schema验证库)升级到了7+版本,而Ajv 7开始不再支持旧的"id"关键字,要求改用"$id"。问题通常出在某个第三方依赖的schema文件还在使用旧写法,和CLI的Ajv版本不兼容。给你几个可行的解决方案:
方案1:强制锁定兼容的Ajv版本
这个方法通过resolutions强制让Angular CLI使用支持"id"关键字的Ajv 6.x版本,步骤如下:
- 首先安装
npm-force-resolutions工具(让npm支持resolutions字段):npm install -D npm-force-resolutions - 在你的
package.json中添加resolutions字段,锁定Ajv版本:"resolutions": { "@angular/cli/ajv": "6.12.6" } - 修改
package.json的scripts,添加预安装脚本自动执行resolutions:"scripts": { "preinstall": "npx npm-force-resolutions" } - 删除
node_modules文件夹和package-lock.json文件,重新安装依赖:rm -rf node_modules package-lock.json npm install
方案2:更新第三方依赖
你的@angular/fire版本是7.0.2,有可能是这个包的schema文件还在用旧的"id"关键字。试试更新到最新版本:
npm update @angular/fire
如果更新后问题仍存在,可以排查其他第三方依赖,看看有没有哪个包的schema文件使用了"id",你可以临时修改该文件把"id"替换成"$id"测试,或者给对应的包提issue要求修复。
方案3:临时降级Angular CLI(不推荐,仅应急)
如果上面的方法都不生效,可以考虑降级到Angular CLI 12.x版本(12版本依赖的Ajv还支持旧的"id"关键字):
npm install @angular/cli@12.2.18
记得同步把其他Angular相关依赖(比如@angular-devkit/build-angular等)也降级到12.x版本,避免版本不兼容。
完成上面任意一个方案后,再执行ng deploy应该就能解决这个错误了。
内容的提问来源于stack exchange,提问作者chadoulis
相关产品推荐
相关产品推荐

