发现不兼容的同级依赖 - 将 Angular 从8升级到9

35

我正在按照官方文档进行升级。

这一步已经顺利完成,没有任何错误。

ng update @angular/core@8 @angular/cli@8

下一步失败了。

ng update @angular/core @angular/cli
The installed Angular CLI version is older than the latest stable version.
Installing a temporary version to perform the update.
Installing packages for tooling via npm.
Installed packages for tooling via npm.
Using package manager: 'npm'
Collecting installed dependencies...
Found 45 dependencies.
Fetching dependency metadata from registry...
                  Package "@angular/core" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/animations" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/compiler" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/forms" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/common" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/platform-browser" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/compiler-cli" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/router" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@angular/platform-browser-dynamic" has a missing peer dependency of "tslib" @ "^1.10.0".
                  Package "@ngtools/webpack" has an incompatible peer dependency to "typescript" (requires ">=3.4 < 3.6", would install "3.7.5").
Incompatible peer dependencies found.
Peer dependency warnings when installing dependencies means that those dependencies might not work correctly together.
You can use the '--force' option to ignore incompatible peer dependencies and instead address these warnings later.

我检查了node_modules,发现tslib的正确版本已安装。

我手动添加了tslib条目,并运行npm install以查看错误是否消失。

  "dependencies": {
    "@angular/animations": "^8.2.14",
    "@angular/common": "^8.2.14",
    "@angular/compiler": "^8.2.14",
    "@angular/core": "^8.2.14",
    "@angular/forms": "^8.2.14",
    "@angular/language-service": "^8.2.14",
    "@angular/platform-browser": "^8.2.14",
    "@angular/platform-browser-dynamic": "^8.2.14",
    "@angular/router": "^8.2.14",
    "@ng-bootstrap/ng-bootstrap": "^5.3.0",
    "classlist.js": "^1.1.20150312",
    "core-js": "^3.6.4",
    "npm": "^6.13.7",
    "rxjs": "^6.5.4",
    "web-animations-js": "^2.3.2",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/architect": "^0.803.25",
    "@angular-devkit/build-angular": "^0.803.25",
    "@angular-devkit/build-optimizer": "^0.803.25",
    "@angular-devkit/build-webpack": "^0.803.25",
    "@angular-devkit/core": "^8.3.25",
    "@angular-devkit/schematics": "^8.3.25",
    "@angular/cli": "^8.3.25",
    "@angular/compiler-cli": "^8.2.14",
    "@ngtools/webpack": "^8.3.25",
    "@schematics/angular": "^8.3.25",
    "@schematics/update": "^0.803.25",
    "@types/jasmine": "^3.5.4",
    "@types/jasminewd2": "^2.0.8",
    "@types/node": "^12.12.27",
    "tslib": "^1.10.0",
    "codelyzer": "^5.2.1",
    "jasmine-core": "^3.5.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "^4.4.1",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "^2.1.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.5.2",
    "protractor": "^5.4.3",
    "rxjs-tslint": "^0.1.7",
    "ts-node": "^8.6.2",
    "tslint": "^5.20.1",
    "typescript": "~3.4",
    "webpack": "^4.41.6",
    "webpack-dev-server": "^3.10.3"
  }

ng v output

Angular CLI: 8.3.25
Node: 12.13.0
OS: win32 x64
Angular: 8.2.14
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.803.24
@angular-devkit/build-angular     0.803.25
@angular-devkit/build-optimizer   0.803.24
@angular-devkit/build-webpack     0.803.25
@angular-devkit/core              8.3.24
@angular-devkit/schematics        8.3.24
@angular/cli                      8.3.25
@ngtools/webpack                  8.3.24
@schematics/angular               8.3.24
@schematics/update                0.803.24
rxjs                              6.5.4
typescript                        3.4.5
webpack                           4.41.5

我还没有尝试使用--force选项。还有其他办法吗?


2
我得到了完全相同的不兼容对等依赖项列表。你能解决这个问题吗?你标记的答案对我来说不够清晰。你能提及一下你采取的解决步骤吗? - Charitha Goonewardena
这个有更新了吗? - Dibzmania
你找到了同样的问题的根本原因或解决方案吗?我也遇到了同样的问题,不想使用--force。谢谢。 - Ambuj Khanna
5个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
21

看起来你忽略了一个错误:

"@ngtools/webpack" 包对 "typescript" 有不兼容的 peer dependency (需要“>=3.4 < 3.6”,但安装的是“3.7.5”)。

尝试使用与 TypeScript 3.4 到 3.5 兼容的较低版本的 @ngtools/webpack。

或者,更新 package.json 中的 TypeScript 版本为 3.7.5 并运行 npm update,然后您应该能够更新 @angular/core 和 @angular/cli。


那么我猜你应该在 package.json 中更新你的 TypeScript 版本:"typescript": "~3.4", - DSN
根据该文档,TypeScript的更新版本是ng update的结果之一。文档称“您的项目现已升级到TypeScript 3.7”。 - workvact
仅仅更新 package.json 并没有起作用。我必须安装 typescript 3.7.5,然后运行更新命令。 - workvact
2
请问您能否更新答案以反映我所做的,这样我就可以接受它作为答案了吗? - workvact
我仍然收到错误信息,缺少对tslib的同行依赖。 - Naga
显示剩余4条评论

10
可能需要使用 --force 标志运行 ng update @angular/core @angular/cli --force 命令,参见 Angular 核心成员的原始回答

3
在我的情况下,解决方法是在运行 ng update [package] 时使用 --force 标志以覆盖依赖关系问题。

这样将仍然升级软件包,并且您可以使用新的依赖项验证应用程序。如果由于破坏性更改而仍需要更新第三方依赖项,则需要更新该软件包。


2
在我的情况下,我肯定不想使用 --force 来进行更新,这样会留下潜在的问题以供以后解决。 使用 npm update 也没有帮助,因为有问题的库(对我来说是 @ng-bootstrap)版本与旧版 Angular(在我的案例中是 Angular 版本 12)有特定的绑定关系。
所以,我卸载了冲突的库,然后进行了 Angular 升级并重新安装了该库。当然,由于我使用了旧版 bootstrap 的逻辑,我不得不手动替换那些用法。

1
在我的情况下,被接受的答案并没有起作用。所以我执行了以下命令,结果对我有效。
npm install @angular/cli@latest @angular-devkit/build-angular@latest  --save-dev

但是我是在本地项目上做的,而不是在系统上全局的 Angular 版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,