Solvedangular cli ng update broken for angular v 5.2 (cli v 1.7.4)

๐Ÿž Bug report

Command (mark with an x)

- [ ] new
- [ ] build
- [ ] serve
- [ ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [x] update
- [ ] lint
- [ ] xi18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc

Is this a regression?

Hard to tell. It seems v8 release broke an existing version

Description

when trying to run ng update following theinstructionss on Angular Update Guide I get the follwoing error

Your global Angular CLI version (8.0.0) is greater than your local
version (1.7.4). The local Angular CLI version is used.

To disable this warning use "ng config -g cli.warnings.versionMismatch false".
Error: Cannot update safely because packages have conflicting dependencies. Package @angular/platform-browser would need to match both versions "7.2.15" and "8.0.0, which are not compatible.
Cannot update safely because packages have conflicting dependencies. Package @angular/platform-browser would need to match both versions "7.2.15" and "8.0.0, which are not compatible.

๐Ÿ”ฌ Minimal Reproduction

my package.json file

  "dependencies": {
    "@angular/animations": "^5.2.0",
    "@angular/common": "^5.2.0",
    "@angular/compiler": "^5.2.0",
    "@angular/core": "^5.2.0",
    "@angular/forms": "^5.2.0",
    "@angular/http": "^5.2.0",
    "@angular/platform-browser": "^5.2.0",
    "@angular/platform-browser-dynamic": "^5.2.0",
    "@angular/router": "^5.2.0",
    "bootstrap": "3.3.7",
    "bootstrap-toggle": "^2.2.2",
    "bpmn-js": "^3.2.3",
    "classlist.js": "^1.1.20150312",
    "codemirror": "^5.37.0",
    "core-js": "^2.4.1",
    "font-awesome": "^4.7.0",
    "jexcel": "^1.5.0",
    "jquery": "3.3.1",
    "jwt-decode": "^2.2.0",
    "less": "^3.0.4",
    "pgparser": "^1.0.4",
    "rxjs": "^5.5.6",
    "web-animations-js": "^2.3.1",
    "zone.js": "^0.8.19"
  },
  "devDependencies": {
    "@angular-devkit/core": "0.3.2",
    "@angular/cli": "~1.7.4",
    "@angular/compiler-cli": "^5.2.0",
    "@angular/language-service": "^5.2.0",
    "@types/jasmine": "~2.8.3",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "autoprefixer": "^7.2.3",
    "codelyzer": "^4.0.1",
    "exports-loader": "^0.7.0",
    "jasmine-core": "~2.8.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "^3.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "^5.4.0",
    "ts-node": "~4.1.0",
    "tslint": "~5.9.1",
    "typescript": "~2.5.3"
  }

๐Ÿ”ฅ Exception or Error

Error: Cannot update safely because packages have conflicting dependencies. Package @angular/platform-browser would need to match both versions "7.2.15" and "8.0.0, which are not compatible.
Cannot update safely because packages have conflicting dependencies. Package @angular/platform-browser would need to match both versions "7.2.15" and "8.0.0, which are not compatible.

๐ŸŒ Your Environment

Angular CLI: 1.7.4
Node: 11.8.0
OS: darwin x64
Angular: 5.2.11
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

@angular/cli: 1.7.4
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.2
@schematics/angular: 0.3.2
@schematics/package-update: 0.3.2
typescript: 2.5.3
webpack: 3.11.0

Anything else relevant?

14 Answers

โœ”๏ธAccepted Answer

I got my angular updated the following way:
#1 manually install a cli version 7.x.x locally npm install @angular/cli@7.3.9
#2 run ng update @angular/cli it now migrates the conf correctly
#3 run ng update @angular/core that should get core to v8
#4 run ng update @angular/cli goes from cli v7 -> v8

Other Answers:

@tuuling I tried your solution based on your reply you made to my issue on #14546. The first two steps worked correctly for me. But step 3, updating @angular/core, fails:

Package "@angular/http" has an incompatible peer dependency to "@angular/platform-browser" (requires "5.2.6" (extended), would install "8.0.0").
Package "@ng-bootstrap/ng-bootstrap" has an incompatible peer dependency to "@angular/forms" (requires "^5.0.2" (extended), would install "8.0.0").
Package "@angular/http" has an incompatible peer dependency to "@angular/core" (requires "5.2.6" (extended), would install "8.0.0").
Package "codelyzer" has an incompatible peer dependency to "@angular/compiler" (requires "^2.3.1 || >=4.0.0-beta <5.0.0" (extended), would install "8.0.0").
Package "@angular/http" has an incompatible peer dependency to "rxjs" (requires "^5.5.0", would install "6.5.2").
Package "@ng-bootstrap/ng-bootstrap" has an incompatible peer dependency to "@angular/common" (requires "^5.0.2" (extended), would install "8.0.0").

I fixed the ng-bootstrap issue by changing the version number in my package.json file to the most recent version of ng-bootstrap. To resolve the other issues, I used ng update @angular/core --force instead of step 3.

After doing this, I was able to update @angular/cli using your step 4 you, and the project seems to build correctly. So hopefully everything is converted correctly. I'm curious if you had to use the --force option or if you didn't encounter the same issues I did.

Thanks @tuuling good workaround. I had to use --force to get around incompatibility errors related to @angular/http. I'll put some extra verbosity in here in case anyone else is curious whether the errors they may get are the same (and now I'm being verbose about being verbose...):

ng update @angular/core
    Package "@angular/http" has an incompatible peer dependency to "@angular/platform-browser" .   
    (requires "5.2.11" (extended), would install "8.1.0").
    Package "@angular/http" has an incompatible peer dependency to "@angular/core" 
    (requires "5.2.11" (extended), would install "8.1.0").
    Package "@angular/http" has an incompatible peer dependency to "rxjs" 
    (requires "^5.5.0", would install "6.5.2").
    Incompatible peer dependencies found. See above.

Solved with ng update @angular/core --force

And

$ ng update @angular/cli
    Package "@angular/http" has an incompatible peer dependency to "@angular/core" 
    (requires "5.2.11" (extended), would install "8.2.0-next.0").
    Package "@angular/http" has an incompatible peer dependency to "@angular/platform-browser"
    (requires "5.2.11" (extended), would install "8.2.0-next.0").
    Incompatible peer dependencies found. See above.

Solved with ng update @angular/cli --force

The modified steps I took were

I got my angular updated the following way:
#1 manually install a cli version 7.x.x locally npm install @angular/cli@7.3.9
#2 run ng update @angular/cli it now migrates the conf correctly
#3 run ng update @angular/core --force that should get core to v8
#4 run ng update @angular/cli --force goes from cli v7 -> v8

May the --force be with you.

Update these package to latest versions that is:

"@angular-devkit/build-angular": "^0.801.0", "@angular-devkit/build-ng-packagr": "^0.801.0",

More Issues: