“@angular/cli”包不是一个依赖项。

146
我尝试运行以下命令时遇到了以下错误: 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.

ng update @angular/cli @angular/core --allow-dirty。 在8.0.0中似乎不再存在,尽管它仍然在他们的文档中,但是ng update --help没有提到它,我已经尝试了--allow-dirty / --allowDirty。不幸的是,我不得不提交然后撤消该提交。 - s sharif
8个回答

294

在我的情况下,缺失了node_modules文件夹。确保在更新之前运行npm i


5
要更新一个项目,必须预先安装所有的软件包。通过试错发现的。谢谢! - Stephan
1
如果ng update出现某些问题而导致失败,那么node_modules可能会令人不爽地消失。 - hlovdal
我进错文件夹了。哎呀。 - Darin Cardin
我进错文件夹了。哎呀。 - undefined

46

首先将你的所有更改提交到仓库中,然后尝试以下命令。

npm i -g @angular/cli@8.0.0
and
ng update --all --force

请阅读这个GitHub上的问题


19
从 Angular 13 开始,--all 参数已被弃用。 - Dragos Stoica
@DragosStoica 有其他的解决方案吗? - Shrembo
我正在使用'npx npm-check-updates -u'命令(您需要先安装“npm-check-updates”包)。 - Dragos Stoica
ng update --all --force 错误:未知参数:all - sam sergiy klok

20
由于我切换了两个差别巨大的分支,而且还没有在该分支上运行 npm install 来获取当前版本(这时是Angular 7),我遇到了相同的问题/错误消息。完成后,我再次运行以下命令以安装最新版本; Angular 8: ng update @angular/cli @angular/core 这一次,错误没有出现,升级成功了。看起来升级过程正在查找有效的文件以知道更新的版本,并且如果缺少或空的 node_modules 文件夹,则Angular无法确定正在更新的确切内容并将抛出此错误。这很有道理,因为CLI根据正在升级的旧版本和要升级的版本数量而表现不同,因此如果没有升级的原始数据,它就无法继续。

11

假设您正在从Angular 8.0升级到Angular 9.0,请按照以下步骤操作:

 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

如果您在运行上述命令时遇到任何同行依赖性警告,请运行 npm uninstall affected_package_name ,然后按照以下步骤操作:

如果你运行上面的命令时遇到任何Peer依赖警告,请运行npm uninstall affected_package_name之后再运行以下步骤:

 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

更新成功后,您可以运行npm uninstall @angular-devkit/schematics

注意:始终遵循Angular升级指南。根据您的情况,您可以交换当前版本和目标Angular版本。在移动到更高版本之前,请确保所有依赖关系都可以在您的目标版本上正常工作。


2
谢谢,帮了我很多。如果package.json中不存在的话,还需要安装@angular/cli - Anant Dhas

5

由于需要使用--force,在遇到错误后我终于将其运行成功。

之前的ng update一直进行到删除了node_modules

在使用--forceng update之前,我必须先重置(reset)分支并运行npm ci


4
  1. "Repository is not clean" 表示您有需要提交或存储的更改。

  2. "Package '@angular/cli' is not a dependency." 要修复此问题,请在项目目录中运行npm install

不能更新 Angular CLI 的原因之一可能是未达到最低 Node.js 版本要求。最新的 Angular CLI(在撰写本文时为 v14)需要 Node.js v14 或更高版本。在这种情况下,您需要执行以下操作:

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

--allow-dirty 帮助迁移即使仓库是脏的。 - Janatbek Orozaly

0
你可能需要定期检查一下node_modules文件夹是否正确。比如说,你应该在里面看到依赖项,而不是一个.staging文件夹。
我刚遇到的一个情况是成功更新了@angular/core @angular/cli,然后我尝试升级@angular/material,但是却无法成功。结果发现我的node_modules文件夹似乎没有完成安装。所以我不得不运行 npm install --force 提交我的更改,然后我终于可以继续进行 ng update @angular/material 长话短说:每次成功安装/更新后,
  1. 检查package.json是否正确,包含了刚刚更新的正确版本号
  2. 确保node_modules看起来正确(不只是一个.staging文件夹)- 如果不是,运行npm installnpm install --force
  3. 如果你已经在一个.git仓库中,添加并提交你当前的更改。

0
你可能在你的 `package.json` 文件中缺少 `@angular/cli` 依赖项。 在 `package.json` 中添加正确版本的 `@angular/cli`。然后运行 `npm install`。提交更改。
之后 `ng update @angular/cli @angular/core` 应该正常工作。

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