我有一个节点包。当我从包的根目录运行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到底做了什么。如果它检测到依赖项,难道不应该安装它吗?在什么情况下它会给我这样的错误消息,我如何解决依赖关系?


当前回答

我在安装react包时遇到了这个问题,这对我来说很有效: NPM install——save <package导致错误>

其他回答

我试图在一个运行npm install的自动化部署系统上工作,所以这些解决方案在自动化的方式下对我来说并不适用。我不能删除/重新创建node_modules/也不能轻易更改Node.js版本。

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

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

例如:

├──UNMET DEPENDENCY css-loader@^0.23.1 NPM安装css-loader@^0.23.1

这为我解决了问题:

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

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

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

NPM update -g

然后就能安装这个包了。

NPM install将从NPM -shrinkwrap安装所有的包。Json,但可能会忽略package中的包。Json,如果它们没有在前者中预设。

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