【实践一】
- 执行 ng serve 报错:
- This version of CLI is only compatible with Angular versions ^10.0.0-beta || >=10.0.0 <11.0.0,
but Angular version 8.0.0 was found instead.
Please visit the link below to find instructions on how to update Angular.
https://angular-update-guide.firebaseapp.com/- 百度的解决方案:npm install --save-dev @angular/[email protected]
- 未能解决问题……
【实践二】
- 执行后报错如下,翻译过来就是指定 10.0.0 版本的 cli:
- 解决方案:
- 删除 node_modules 目录下的 ng 库( node_modules 文件夹下 angular 文件夹)
- 在该项目下重新安装 指定版本 的 cli:npm install @angular/[email protected]10.0.0 --save
- 注意:--save 是安装到当前项目, 对全局没影响,就是说只会更新当前项目的 cli,不会影响本机全局的 cli
- 未能解决问题……
【实践三】
- 我打算把本机全局的 cli 版本降级,更换成项目中的版本,再次运行,不过还是失败了
- 本机全局的 cli 在:C盘/用户/XX/AppData/Roaming/npm/node_modules
- 去除 package.json 版本号前的 “ ^ ”,就是去除锁版本,然后删除 package.lock.json 文件,重新 npm i,失败
【实践四】
- 后来经过检查 package.json 发现:cli 是 10.xx 版本 ,但是 ng 的 core 包是 8.0 版本
- 我改了 cli 的版本 (10.x.x → 8.0.0),删除了项目中的 node_moudles,重新执行 npm i,如下图:
- 成功解决问题
【总结】
- 这个错误非常的少见,当局者迷,当拿到一个旧版本 Angular 项目时,应该:
- 【法一】先查看 package.json 中的 cli 、core 版本是否一致,不一致要将 cli 更改为 core 的版本,执行 npm i
- 【法二】如果失败了,要先卸载更新本地(项目) cli,再卸载更新全局(本机) cli,使得全局 cli 和本地 cli 一致
- 卸载更新本地(项目) cli:
- 卸载:npm uninstall @angular/cli --save(或手动删除项目中的 node_modules/@angular 文件夹)
- 更新:npm install @angular/[email protected] --save (根据提示的 cli 版本进行安装)
- 卸载更新全局(本机) cli:
- 卸载:npm uninstall @angular/cli -g
- 更新:npm install @angular/[email protected]~10.0.0 -g (更成和当前项目一致)