我有一个节点包。当我从包的根目录运行npm install时,它安装了一堆东西,但随后打印了一些错误消息,看起来像这样:

npm WARN unmet dependency /Users/seanmackesey/google_drive/code/explore/generator/node_modules/findup-sync/node_modules/glob需要grace -fs@'~1.2.0'但会加载

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


当前回答

在我的例子中,更新npm解决了这个问题。

sudo npm install -g npm

其他回答

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

NPM update -g

然后就能安装这个包了。

我相信这是因为依赖项解析有点坏,请参阅https://github.com/npm/npm/issues/1341#issuecomment-20634338

以下是可能的解决方案:

需要手动安装顶级模块,包含未满足的依赖项: NPM安装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 cache clean

为什么“移除node_modules”有时是必要的? 当一个嵌套模块在npm安装过程中安装失败时,后续的npm安装将不会检测到那些缺失的嵌套依赖项。

如果是这样的话,有时候删除那些缺少嵌套模块的顶层依赖就足够了,然后再次运行npm install。看到

在安装npm时,我的WIFI出现了问题。删除node_modules并重新运行npm install修复了它。

类似的事情,我想再加一步。

注意,在npm版本> 1.4.9上,'npm install'确实安装了devDependencies。首先尝试删除现有模块和缓存:

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

然后尝试:

npm install --dev
npm update --dev

这至少可以解决递归依赖项解析。

这为我解决了问题:

更正包中的版本号。Json,根据错误; 删除node_modules (rm -rf node_modules); 重新运行npm install。

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