无法解决依赖关系:npm ERR!peer @angular/compiler@“11.2.8”

85

我正在尝试在Heroku上部署我的应用程序。我之前遇到了“sh: 1: ng: not found”错误,但是在这里的回复中,我移动了@angular/cli、@angular-devkit/build-angular、@angular/compiler-cli和typescript。现在我遇到了“Could not resolve dependency: npm ERR! peer @angular/compiler@"11.2.8"" error。我认为这可能是一个版本问题?我不确定发生了什么。

我尝试运行“npm update”,并尝试手动将“@angular/compiler@"11.2.8"插入依赖项,然后运行“npm i”,但两者都给我同样的错误信息。

以下是我的错误:

npm ERR! Found: @angular/compiler@11.0.9
npm ERR! node_modules/@angular/compiler
npm ERR!   @angular/compiler@"~11.0.1" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer @angular/compiler@"11.2.8" from @angular/compiler-cli@11.2.8
npm ERR! node_modules/@angular/compiler-cli
npm ERR!   dev @angular/compiler-cli@"^11.0.9" from the root project
npm ERR!   peer @angular/compiler-cli@"^11.0.0" from @angular-devkit/build-angular@0.1100.7
npm ERR!   node_modules/@angular-devkit/build-angular
npm ERR!     @angular-devkit/build-angular@"~0.1100.2" from the root project

包描述文件(Package.json):

"scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "postinstall": "ngcc"
  },
  "private": true,
  "dependencies": {
    "@angular-devkit/build-angular": "~0.1100.2",
    "@angular/animations": "~11.0.1",
    "@angular/cdk": "^11.2.6",
    "@angular/cli": "~11.0.2",
    "@angular/common": "~11.0.1",
    "@angular/compiler": "~11.0.1",
    "@angular/core": "~11.0.1",
    "@angular/flex-layout": "^11.0.0-beta.33",
    "@angular/forms": "~11.0.1",
    "@angular/material": "^11.2.6",
    "@angular/platform-browser": "~11.0.1",
    "@angular/platform-browser-dynamic": "~11.0.1",
    "@angular/router": "~11.0.1",
    "angular-in-memory-web-api": "^0.11.0",
    "rxjs": "~6.6.0",
    "tslib": "^2.0.0",
    "typescript": "~4.0.2",
    "uuid": "^3.4.0",
    "zone.js": "~0.10.2"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.1100.2",
    "@angular/cli": "~11.0.2",
    "@angular/compiler-cli": "^11.0.9",
    "@types/jasmine": "~3.6.0",
    "@types/node": "^12.11.1",
    "codelyzer": "^6.0.0",
    "jasmine-core": "~3.6.0",
    "jasmine-spec-reporter": "~5.0.0",
    "karma": "~5.1.0",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage": "~2.0.3",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "^1.5.0",
    "protractor": "~7.0.0",
    "ts-node": "~8.3.0",
    "tslint": "~6.1.0",
    "typescript": "~4.0.2"
  }

如何解决这个错误?

8个回答

181

除了使用npm install --save --legacy-peer-deps命令行选项外,这也可以更永久地设置为配置选项:npm config set legacy-peer-deps true

如果上述方法不起作用,请尝试删除node_modules文件夹和package-lock.json文件,然后运行npm install命令。


npm install --save --legacy-peer-deps 命令给了我一个“Error: Error on worker #1: TypeError: compiler_1.devOnlyGuardedExpression is not a function”的错误,你知道这是什么意思吗? - AylaWinters
2
我尝试了第二个命令,然后删除了node_modules/package-lock.json文件,我认为编译器版本问题已经解决了!谢谢!!不幸的是,现在ng找不到的问题又回来了...我会继续研究的。 - AylaWinters
2
我曾经遇到过类似的问题,第二种方法对我很有帮助。 - danielcaballero88
3
@Salahuddin Ahmad,谢谢您,第一个解决方案对我有效! - Khalid
删除 node_modules 和 package-lock.json 然后运行命令 npm install 就可以了 :) - dineshsivalingam
在运行npm i之前,我个人建议先运行npx npm-check-updates -u。希望这能帮助到那些像我一样迷茫的人XD。 - Micah

34

听起来像是与对等依赖关系有关的问题,请尝试使用npm install --legacy-peer-deps


2
这给了我一个“错误:工作程序#1上的错误:TypeError:compiler_1.devOnlyGuardedExpression不是函数”的错误。 - AylaWinters

13
根据npm CLI配置文档的说法:

不建议使用legacy-peer-deps,因为它不会强制执行元依赖项可能依赖的peerDependencies合同。

为了遵循npm的建议,我没有设置--legacy-peer-deps,而是检查了package-lock.json文件,发现devDependencies(与Angular相关的包)仍在引用旧版本(在我的例子中是13.0.1,需要升级到13.2.0)。
我只需删除package-lock.json并运行npm install,就可以安装ng update @angular/cli @angular/core所做的更新(package.json)。
同时也不需要删除node_modules。

非常优雅,并且像魔术般运作 - 谢谢! - jimiayler

6
你可能正在使用更新的Node版本。我在使用Node 17时遇到了这个问题。我将Node回滚到14(项目最初使用的版本),然后npm安装成功。
我建议您将来使用NVM。你可以在你的项目中添加一个.nvm文件,以便锁定要使用的Node版本。

降级 Node 并不是解决方案,而且会削弱您的安全性能。 - Stuart Dobson

2
以上的解决方案都对我无效。这是我的变通方法。
  1. 复制src文件夹。
  2. 删除Angular项目并创建一个新的。
  3. 用新的src替换旧的。
  4. 安装依赖项。
这有点像全新安装,但版本是你想要的。

2
对于面临与最新的@angular升级相关问题的人来说,以下是一个有帮助的步骤:
  1. 运行以下命令之一: (选项1):npm install --save --legacy-peer-deps (选项2)- 永久配置选项:npm config set legacy-peer-deps true
  2. 删除node_modules文件夹和package-lock.json文件
  3. 运行:npx npm-check-updates -u
  4. 运行:npm install
在这个过程中,有一个额外的步骤可以帮助你,那就是第3步:npx npm-check-updates -u。这将更新你的package.json,添加所有最新版本,以确保你的安装命令npm i能够顺利运行,没有任何问题。

1
尝试了上述所有解决方案,但都没有对我起作用。卸载并重新安装了Node -> npm install。猜猜看?它奏效了。 :)

1

使用此命令安装您所需的插件。

在我的情况下,它是ngx-scrollbar插件。因此,最终命令将是:

npm install ngx-scrollbar --save --legacy-peer-deps

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