ChatGPT解决这个技术问题 Extra ChatGPT

为什么 npm install 说我有未满足的依赖项?

我有一个节点包。当我从包根目录运行 npm install 时,它会安装一堆东西,但随后会打印几条如下所示的错误消息:

npm WARN 未满足的依赖项 /Users/seanmackesey/google_drive/code/explore/generator/node_modules/findup-sync/node_modules/glob 需要 graceful-fs@'~1.2.0' 但会加载

我一定对 npm install 到底做了什么感到困惑。如果它检测到依赖项,不应该安装它吗?在什么情况下它会给我这样的错误消息,我该如何解决依赖关系?


L
Liam

我相信这是因为依赖解析有点破,见https://github.com/npm/npm/issues/1341#issuecomment-20634338

以下是可能的解决方案:

手动需要安装顶层模块,包含未满足的依赖项: npm install findup-sync@0.1.2 重新构建你的 package.json。将所有高级模块(作为其他模块的依赖项)放在底部。重新运行 npm install 命令。

该问题可能是由于 npm 由于超时或其他原因而无法下载所有包引起的。

注意:您也可以使用 npm install findup-sync@0.1.2 手动安装失败的软件包。

在运行 npm install 之前,执行以下步骤可能会有所帮助:

使用 rm -rf node_modules/ 删除 node_modules

运行 npm 缓存清理

为什么有时需要“删除 node_modules”?如果嵌套模块在 npm install 期间安装失败,后续的 npm install 将不会检测到那些缺少的嵌套依赖项。

如果是这种情况,有时删除那些缺少的嵌套模块的顶级依赖项并再次运行 npm install 就足够了。看


删除节点模块并清理缓存使其对我有用。
删除“node_modules”,运行“npm cache clean”,然后运行“npm install”解决了我的问题。我必须运行 'npm_install' 三次,直到我加载所有依赖项而没有错误。
如果 npm cache clean 因访问原因不起作用,请尝试 sudo npm cache clean
@Soroush 只是盲目地将 sudo 添加到无法正常工作的东西并不能神奇地修复它们,只是意味着你不知道发生了什么。
为什么 npm 的其他“解决方案”包括 rm r node_modules?为什么在大多数情况下这确实是唯一的选择?这不是我认为包管理器应该像这样工作的方式
t
the Tin Man

当 WIFI 在 npm install 期间出现故障时,我发生了这种情况。删除 node_modules 并重新运行 npm install 修复了它。


并尝试 npm cache clean
可能不需要重新安装节点,但在这样做之间,npm cache clean 和删除 node_modules,这个建议对我有用。
@RichLitt,是的,做 npm cache clean 对我来说还不够,在“安装”期间联网失败后,我还必须删除 node_modules 才能使其正常工作。
我不知道要删除哪个 node_modules 目录?我对错误 /usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2' 有类似的问题
@wuliwong 一级。
z
zatamine

我通过使用这些命令行解决了这个问题

rm -rf 节点模块/

$ sudo npm 更新 -g npm

$ npm 安装

完成!


运行 sudo npm update -g npm 后,我的 npm 变得无用,任何安装任何东西的尝试都会导致“npm ERR!找不到模块'read-package-json'”我将不得不对此投反对票
它对我和其他人都有效,也许你还有其他问题。尝试全局安装模块 read-package-json sudo npm install -g read-package-json 或重新安装你的 npm
警告:您不应将 sudo 与 npm 一起使用,建议改为更改 npm 也想写入的目录的权限或所有权。
可能也想在那里添加“npm cache clean”
不要将 sudo 与 npm 一起使用
s
stephen

将 NPM 升级到最新版本可以对此有很大帮助。上面dule的回答说依赖管理有点破是对的,但似乎这主要是针对旧版本的npm。

命令 npm list 为您提供所有已安装 node_modules 的列表。当我从版本 1.4.2 升级到版本 2.7.4 时,许多以前标记为 WARN unmet dependency 的模块不再被标记为这样。

要更新 npm,您应该在 MacOSX 或 Linux 上键入 npm install -g npm。在 Windows 上,我发现重新下载并重新运行 nodejs 安装程序是更新 npm 的更有效方法。


我在 CentOS 7 存储库中分发的 npm 版本遇到了同样的问题。我从 node.js 安装了最新的 npm 版本,问题消失了,所以我认为你是对的,这可能是旧版本的问题。
C
Community

即使在删除 node_modules 目录后,上述答案也没有完全帮助我。

下面的命令终于帮助了我:

npm config set registry http://registry.npmjs.org/

请注意,这会通过不安全的 HTTP 连接拉取节点模块。

来源:https://stackoverflow.com/a/13119867/4082503


这有助于我和我的主机重定向流量。
@dimgl 很高兴知道 :)
@Dejel您是否也尝试过其他答案。您可能需要多次运行 npm install 和/或手动安装一些节点包。
A
Aakash

对于每个 -- UNMET PEER DEPENDENCY,例如。 -- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2,使用 npm install --save rxjs@5.0.0-rc.2 安装该依赖项,直到您不再有 UNMET DEPENDENCIES

祝你好运。


给我留下同样的错误,包括一个新的错误:ERR! code 1
@WouterVanherck 你能试试 rm -rf node_modules,然后是 npm cache cleannpm install。如果还是不行,我建议你再次rm -rf node_modules,然后是npm i -g yarn,然后是yarn installYarn 很好管理node_modules。祝你好运。
是的,这就是 peerDependencies 的用途。促使您有意识地选择版本。
a
achasinh

我运行 npm list 并安装了列为 UNMET DEPENDENCY 的所有软件包

例如:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1


w
wuliwong

我在安装 React Native CLI 时遇到了类似的问题。阅读此处的答案后,我不确定应该删除哪个 /node_modules 目录。我最终只是跑了

npm update -g

并且之后能够安装该软件包。


J
Julien Lopez

这为我解决了它:

根据错误更正package.json中的版本号;移除 node_modules (rm -rf node_modules);重新运行 npm install。

重复这些步骤,直到不再有错误。


J
John Doe

类似的事情,我会添加另一个步骤。

请注意,在 npm 版本 > 1.4.9 上,“npm install”会安装 devDependencies。首先尝试删除现有模块和缓存:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

然后尝试:

npm install --dev
npm update --dev

这至少会解决递归依赖解析。


--dev 标志是做什么用的?
a
arielhad

--dev 递归安装devDependencies(并且它永远运行..)它如何帮助解决版本差异?

您可以尝试删除 node_moduls 文件夹,然后清理 npm 缓存,然后再次运行“npm i”


U
Uberbrady

我试图在运行 npm install 的自动化部署系统上工作,因此这些解决方案中的许多解决方案在自动化模式下都不适合我。我无法删除/重新创建 node_modules/,也无法轻松更改 Node.js 版本。

所以我最终运行了 npm shrinkwrap - 将 npm-shrinkwrap.json 文件添加到我的部署包中,并从那里运行安装。这为我解决了问题;使用 shrinkwrap 文件作为“助手”,npm 似乎能够找到正确的包并为我安装它们。 (Shrinkwrap 还有其他功能,但这是我在这种特殊情况下需要的)。


k
korp

我在安装反应包时遇到了这个问题,这对我有用:npm install --save <package causing this error>


M
Marcelo Gumiero

就我而言,npm 的更新解决了它。

sudo npm install -g npm

M
Marius

npm install 将安装 npm-shrinkwrap.json 中的所有软件包,但如果 package.json 中的软件包未在前者中预设,则它们可能会忽略它们。

如果您的项目有 npm-shrinkwrap.json,请确保在每次添加添加/删除/更改 package.json 时运行 npm shrinkwrap 重新生成它。


T
Terai

注意你的角度版本,如果你在 angular 2.xx 下工作,那么你可能需要升级到 angular 4.xx

一些依赖项需要 Angular 4

Here is a tutorial for how to install angular 4 or update your project.


M
Machavity

更新到 4.0.0

更新到 4 就像将 Angular 依赖项更新到最新版本一样简单,并仔细检查是否需要动画。这适用于大多数用例。

在 Linux/Mac 上:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

在 Windows 上:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

然后运行您通常使用的任何 ng serve 或 npm start 命令,一切都应该正常。

如果您依赖动画,请从根 NgModule 中的 @angular/platform-browser/animations 导入新的 BrowserAnimationsModule。没有这个,你的代码将编译并运行,但动画会触发错误。已弃用来自 @angular/core 的导入,请使用来自新包的导入

import { trigger, state, style, transition, animate } from '@angular/animations';.