140

I am getting the following error when I try to run the command

ng update @angular/cli @angular/core --allow-dirty

Repository is not clean.  Update changes will be mixed with pre-existing changes.
Using package manager: 'npm'
Collecting installed dependencies...
Found 28 dependencies.
Package '@angular/cli' is not a dependency.
atconway
  • 20,624
  • 30
  • 159
  • 229
shayanmalinda
  • 1,925
  • 3
  • 12
  • 23
  • ng update @angular/cli @angular/core --allow-dirty. This doesn't seem to exist anymore in 8.0.0, although it's still in their documentation, ng update --help has no mention of it and I've tried --allow-dirty/--allowDirty. I unfortunately had to commit and then undo that commit. – s sharif Sep 02 '19 at 05:10

7 Answers7

281

In my case it was missing node_modules folder. Make sure to run npm i before updating.

eagor
  • 9,150
  • 8
  • 47
  • 50
46

First commit all your changes to the repo and then try following commands.

npm i -g @angular/cli@8.0.0

and

ng update --all --force

Please read this issue on github

Nimezzz
  • 1,814
  • 14
  • 15
19

I ran into this same issue/error message because I had switched branches that were drastically different and not yet run npm install on the branch to get the current version installed which at this point was Angular 7. After that completed, I ran the following again to install the latest version; Angular 8:

ng update @angular/cli @angular/core

This time the error did not appear and the upgrade was a success. It appears that the upgrade process is looking for valid files to know what version it's updating from, and if there is a missing or empty node_modules folder, Angular can't tell what exactly is being updated and will throw this error. It makes sense because the CLI behaves differently based on the old version being upgraded and how many versions are being updated, so if it has nothing to read from for upgrading it can't continue.

atconway
  • 20,624
  • 30
  • 159
  • 229
11

Assuming you are upgrading from Angular 8.0 to Angular 9.0 follow the following steps:

 1. rm -rf node_modules package-lock.json
 2. npm install @angular-devkit/schematics@8
 3. ng update @angular/core@8 @angular/cli@8
 4. ng update @angular/core@9 @angular/cli@9

In case you face any Peer dependency warnings when running the commands above run npm uninstall affected_package_name and then run the steps below:

 1. npm i
 2. ng update @angular/core@8 @angular/cli@8
 3. ng update @angular/core@9 @angular/cli@9
 4. npm i compatible_affected_package_name

You can run npm uninstall @angular-devkit/schematics after successful update.

Note: Always follow the Angular update Guide. You can swap the current and target angular versions depending on your situation. Before moving to higher versions ensure that all of your dependencies can work on your target version.

Hamfri
  • 1,979
  • 24
  • 28
5

Got this running after a bomb-out due to a --force being required.

The previous ng update had got so far and had deleted node_modules.

Had to reset branch and npm ci first before running with ng update with the --force.

jenson-button-event
  • 18,101
  • 11
  • 89
  • 155
4
  1. "Repository is not clean" means you have changes that needs to be commited or stashed.

  2. "Package '@angular/cli' is not a dependency." to fix run npm install in your project directory.

One of the reason angular cli can not be updated might be the minimum node.js version is not met. The lastest angular cli (v14 at the time of writing) requires nodejs version of the v14 or above. In that case you have to do the following:

nvm i v14
ng update @angular/cli @angular/core
ng v (to check angular cli version)
0

You might be missing @angular/cli dependency in your package.json file. Add proper version of @angular/cli to package.json. And then run npm install. Commit your changes.

After that ng update @angular/cli @angular/core should work properly.

Michał Stochmal
  • 5,895
  • 4
  • 36
  • 44