我有一个节点包。当我从包的根目录运行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升级到最新版本可以极大地帮助解决这一问题。Dule上面的回答是对的,依赖管理有点坏,但似乎这主要是针对旧版本的npm。

命令npm list提供了所有已安装的node_module的列表。当我从版本1.4.2升级到版本2.7.4时,许多以前标记为WARN未满足依赖关系的模块不再这样标记。

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

其他回答

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

例如:

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

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

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

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

注意,这将通过不安全的HTTP连接来拉节点模块。

Src: https://stackoverflow.com/a/13119867/4082503

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

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

更新至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命令,一切都应该正常工作。

如果你依赖于Animations,在你的根模块中从@angular/platform-browser/ Animations导入新的BrowserAnimationsModule。如果没有这一点,您的代码将编译和运行,但动画将触发一个错误。@angular/core中的导入已弃用,请使用新包中的导入

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

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

NPM update -g

然后就能安装这个包了。