拿到旧版本的 Angular 项目运行遇到的问题 —— cli 是 10.xx 版本,core 包是 8.0 版本

时间:2024-04-12 19:27:40

【实践一】

  • 执行 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/
  • 拿到旧版本的 Angular 项目运行遇到的问题 —— cli 是 10.xx 版本,core 包是 8.0 版本
  • 百度的解决方案:npm install --save-dev @angular/[email protected]
  • 未能解决问题…… 

【实践二】

  • 执行后报错如下,翻译过来就是指定 10.0.0 版本的 cli:
  • 拿到旧版本的 Angular 项目运行遇到的问题 —— cli 是 10.xx 版本,core 包是 8.0 版本
  • 解决方案:
  1. 删除 node_modules 目录下的 ng 库( node_modules 文件夹下 angular 文件夹)
  2. 在该项目下重新安装 指定版本 的 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,失败
  • 拿到旧版本的 Angular 项目运行遇到的问题 —— cli 是 10.xx 版本,core 包是 8.0 版本

【实践四】

  • 后来经过检查 package.json 发现:cli 是 10.xx 版本 ,但是 ng 的 core 包是 8.0 版本
  • 我改了 cli 的版本 (10.x.x → 8.0.0),删除了项目中的 node_moudles,重新执行 npm i,如下图:
  • 拿到旧版本的 Angular 项目运行遇到的问题 —— cli 是 10.xx 版本,core 包是 8.0 版本
  • 成功解决问题

【总结】

  • 这个错误非常的少见,当局者迷,当拿到一个旧版本 Angular 项目时,应该:
  • 【法一】先查看 package.json 中的 cli 、core 版本是否一致,不一致要将 cli 更改为 core 的版本,执行 npm i
  • 【法二】如果失败了,要先卸载更新本地(项目) cli,再卸载更新全局(本机) cli,使得全局 cli 和本地 cli 一致
  • 卸载更新本地(项目) cli:
  1. 卸载:npm uninstall @angular/cli --save(或手动删除项目中的 node_modules/@angular 文件夹)
  2. 更新:npm install @angular/[email protected]  --save (根据提示的 cli 版本进行安装)
  • 卸载更新全局(本机) cli:
  1. 卸载:npm uninstall @angular/cli -g
  2. 更新:npm install @angular/[email protected]~10.0.0 -g (更成和当前项目一致)