Angular项目升级CLI后执行ng命令报错:指定schema已存在
解决Angular项目中
ng命令报错"schema with key or id 'http://json-schema.org/draft-06/schema' already exists"的问题 你在升级Angular版本并安装Material库的过程中遇到了CLI冲突问题,咱们一步步来修复:
问题根源分析
你从Angular 5升级到6后,全局更新了@angular/cli到最新版本,但项目本地的依赖缓存、配置文件可能和全局CLI产生了冲突,导致schema重复引用的错误。
具体修复步骤
1. 清理本地依赖与缓存
首先彻底清理项目里的旧依赖和缓存文件:
- 删除项目根目录下的
node_modules文件夹 - 删除
package-lock.json文件(如果用Yarn则删除yarn.lock) - 清理npm全局缓存:
npm cache clean --force
2. 确保本地CLI与项目依赖版本匹配
虽然你全局CLI已经更新,但项目本地的@angular/cli版本需要和全局版本保持一致(或者至少和Angular核心版本匹配)。执行以下命令安装项目本地的CLI:
npm install @angular/cli@6.0.1 --save-dev
注:你的项目已经升级到Angular 6.0.1,所以安装对应版本的CLI即可,避免版本不兼容。
3. 检查并修复Angular配置文件
Angular 6使用angular.json替代了旧版本的.angular-cli.json,请检查该文件中的$schema字段:
确保它指向本地CLI的schema文件,而不是外部的draft-06 schema:
"$schema": "./node_modules/@angular/cli/lib/config/schema.json"
如果发现有重复的schema引用,删除多余的条目即可。
4. 重新安装所有依赖
完成以上步骤后,重新安装项目依赖:
npm install
5. 额外排查(如果以上步骤无效)
- 删除项目根目录下的
.angular缓存文件夹(如果存在) - 重启你的终端窗口,确保环境变量和CLI路径生效
- 尝试用
npx ng代替直接ng命令,强制使用项目本地的CLI版本
关于最初的ElementRef非泛型错误
这个错误是因为Angular 5到6的版本变化:Angular 6中ElementRef变成了泛型类型,而你最初安装的Material库版本可能和Angular 5不兼容。你已经升级到Angular 6并安装了对应版本的@angular/material和@angular/cdk(6.0.1),这个问题应该已经解决了。
内容的提问来源于stack exchange,提问作者Philipp Ludwig
相关产品推荐
相关产品推荐

