angular-cli icon indicating copy to clipboard operation
angular-cli copied to clipboard

'ng update' does not work with yarn workspaces

Open pleinonen opened this issue 5 years ago • 15 comments

🐞 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?

No

Description

I am utilizing yarn workspaces -feature in my project. Problem is that I have to keep Angular & AngularCLI dependencies on root packages.json, otherwise 'ng update' command can't figure out the version I currently have. I'd rather keep root package.json clean and move Angular & CLI dependencies to project/package.json to keep things isolated.

Looking at the code, update command resolves dependencies from root package, even when command is executed on package folder. Would it be possible to change behavior in a way that update would first check package dependencies and the fall back to root if nothing is found?

🔬 Minimal Reproduction

  • init yarn workspace project as follows: https://yarnpkg.com/lang/en/docs/workspaces/
  • init angular app with cli and move dependencies from root package.json to workspace-a/package.json (example from previous step)
  • wait until new angular version is available
  • cd to 'workspace-a' and run 'ng update'. Command fails to find any dependencies to update.

🔥 Exception or Error

N/A

🌍 Your Environment


Angular CLI: 8.0.3
Node: 10.15.3
OS: win32 x64
Angular: 8.0.1
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router, service-worker

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.800.3
@angular-devkit/build-angular     0.800.3
@angular-devkit/build-optimizer   0.800.3
@angular-devkit/build-webpack     0.800.3
@angular-devkit/core              8.0.3
@angular-devkit/schematics        8.0.3
@angular/cli                      8.0.3
@angular/pwa                      0.800.3
@ngtools/webpack                  8.0.3
@schematics/angular               8.0.3
@schematics/update                0.800.3
rxjs                              6.4.0
typescript                        3.4.5
webpack                           4.30.0

Root package.json:

  "dependencies": {},
  "devDependencies": {
    "npm-run-all": "^4.1.5"
  },

'workspace-a/package.json':

"dependencies": {
    "@angular/animations": "~8.0.1",
    "@angular/common": "~8.0.1",
    "@angular/compiler": "~8.0.1",
    "@angular/core": "~8.0.1",
    "@angular/forms": "~8.0.1",
    "@angular/platform-browser": "~8.0.1",
    "@angular/platform-browser-dynamic": "~8.0.1",
    "@angular/pwa": "^0.800.3",
    "@angular/router": "~8.0.1",
    "@angular/service-worker": "~8.0.1",
    "@auth0/angular-jwt": "^2.1.0",
    "@ngx-translate/core": "^11.0.1",
    ...
    "rxjs": "~6.4.0",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.800.0",
    "@angular/cli": "~8.0.3",
    "@angular/compiler-cli": "~8.0.1",
    "@angular/language-service": "~8.0.1",
    ...
  }

Anything else relevant?

pleinonen avatar Jun 20 '19 08:06 pleinonen

Hi, thanks for opening this, however at the moment this is not supported, and hence I am going to mark it as a feature request.

alan-agius4 avatar Jun 20 '19 17:06 alan-agius4

I'm also struggling with this one while trying to upgrade to Angular 9. Is it possible yet?

laneschmidt avatar Feb 11 '20 17:02 laneschmidt

I think there may have been some progress here in recent versions because running ng update with no parameters correctly identifies dependencies and what should be updated:

ng update
Using package manager: 'yarn'
Collecting installed dependencies...
Found 142 dependencies.
    We analyzed your package.json, there are some packages to update:
    
      Name                                                   Version                  Command to update
     ----------------------------------------------------------------------------------------------------
      @angular/cdk                                           8.2.3 -> 9.1.0           ng update @angular/cdk
      @angular/material                                      8.2.3 -> 9.1.0           ng update @angular/material

However, the actual update command for a package doesn't work:

ng update @angular/cdk
Using package manager: 'yarn'
Collecting installed dependencies...
Found 142 dependencies.
Package '@angular/cdk' is not a dependency.

Seems like we're almost there. The problem is on this line:

https://github.com/angular/angular-cli/blob/9b7b2f0047efa0647ebb7329345a4975a2c56c4d/packages/angular/cli/commands/update-impl.ts#L546

Notice how it says Found 142 dependencies. The .node property is not defined, but the actual dependency is there in the rootDependencies object.

andreialecu avatar Feb 25 '20 09:02 andreialecu

Possibly relevant: https://github.com/gatsbyjs/gatsby/commit/3b5e41b93361ca39b34aaf52ef9a9e302da921ea

Seems like a similar commit in gatsby for resolving issues with yarn workspaces. They replaced read-package-tree with their own implementation.

andreialecu avatar Feb 25 '20 09:02 andreialecu

Still relevant. Trying to upgrade from v9 to v10:

The installed local Angular CLI version is older than the latest stable version.
Installing a temporary version to perform the update.
Installing packages for tooling via yarn.
Installed packages for tooling via yarn.
Repository is not clean. Update changes will be mixed with pre-existing changes.
Using package manager: 'yarn'
Collecting installed dependencies...
Found 21 dependencies.
Package '@angular/cli' is not a dependency.

ScarletFlash avatar Jul 01 '20 11:07 ScarletFlash

I opened a PR at #18610 to implement this. cc @alan-agius4

andreialecu avatar Aug 27 '20 17:08 andreialecu

I opened a PR at #18610 to implement this. cc @alan-agius4

@andreialecu will this work for npm workspaces too?

boeckMt avatar May 26 '21 15:05 boeckMt

@boeckMt I haven't tested it, but the PR I made was package manager agnostic - not yarn specific. It was mainly changing some hard coded path handling to use things like require.resolve instead.

andreialecu avatar May 27 '21 07:05 andreialecu

I do

yarn workspace <angular_project_folder> ng update @angular/core @angular/cli

and it worked for me.

ahnpnl avatar Dec 04 '21 10:12 ahnpnl

Just a heads up that we kicked off a community voting process for your feature request. There are 20 days until the voting process ends.

Find more details about Angular's feature request process in our documentation.

angular-robot[bot] avatar Feb 01 '22 18:02 angular-robot[bot]

Thank you for submitting your feature request! Looks like during the polling process it didn't collect a sufficient number of votes to move to the next stage.

We want to keep Angular rich and ergonomic and at the same time be mindful about its scope and learning journey. If you think your request could live outside Angular's scope, we'd encourage you to collaborate with the community on publishing it as an open source package.

You can find more details about the feature request process in our documentation.

angular-robot[bot] avatar Feb 21 '22 13:02 angular-robot[bot]

The issue is happens also in npm workspaces: https://github.com/angular/angular-cli/issues/26311

vlio20 avatar Nov 10 '23 10:11 vlio20

STILL an issue

jjgriff93 avatar Jan 03 '24 15:01 jjgriff93

For me it works to temporary remove the dependencies that exist locally in the monorepo from the package.json, then run the update and then re-add them.

Anyways a direct support from angular would be awesome!

EinfachHans avatar Mar 14 '24 13:03 EinfachHans

Still facing issues while migrating from Angular v16 to v17. Is there still no solution for this?

Ameni-sbai16 avatar Jun 20 '24 14:06 Ameni-sbai16