我有一个节点包。当我从包根目录运行npm install时,它会安装一堆东西,但随后会打印如下几条错误消息:
npm WARN unmet dependency /Users/seanmackesey/google_drive/code/explore/generator/node_modules/findup-sync/node_modules/glob requires graceful-fs@'~1.2.0' but will load
我一定很困惑npm install到底做了什么。如果它检测到依赖项,是否应该安装它?在什么情况下,它会给我这样的错误消息,以及如何解决依赖关系?
我认为这是因为依赖解析有点不完善,请参阅https://github.com/isaacs/npm/issues/1341 issuecomment-20634338
以下是可能的解决方案:
需要手动安装顶级模块,其中包含未设置的依赖项:npm安装findup同步@0.1.2
重新构造package.json。将所有高级模块(作为其他模块的依赖项)放在底部。
重新运行"npm install"命令。
问题可能是由于超时或其他原因导致NPM无法下载所有包。
注意:您也可以使用npm install findup [email protected]手动安装失败的软件包。
在运行"npm install"之前,执行以下步骤可能会有所帮助:
- 使用rm-rf node_模块移除node_模块/
- 运行NPM缓存清除
为什么有时需要"删除节点模块"?当一个嵌套模块在NPM安装期间无法安装时,后续的NPM安装将不会检测到那些丢失的嵌套依赖项。
如果是这样的话,有时就足够删除那些丢失的嵌套模块的顶层依赖关系,并再次运行NPM安装。见
- geon提出了另一个好观点,如果一个npm install没有完成,你会得到同样的结果。到目前为止,npm有点不稳定,因此有时模块只是无法下载,但在这种情况下重新运行npm install有时会自行修复。
- 删除节点模块并清除缓存使其对我有效。
- 删除"node_modules",运行"npm cache clean",然后运行"npm install"修复了我的问题。我必须运行"npm-install"三次,直到加载所有依赖项时没有出错。
- 如果npm cache clean由于访问原因不工作,请尝试sudo npm cache clean。
- @不好意思,盲目地在不起作用的东西上添加sudo并不能神奇地修复它们,只是意味着你不知道发生了什么。
- 第一个建议是:直接安装丢失的模块。NPM上有人花时间正确地实现了错误消息。照它说的做。
- 为什么NPM的其他"解决方案"包括RM R节点_模块?为什么在大多数情况下,这确实是唯一的选择?我并不认为包经理应该这样工作
- 使用rm-r节点_模块而不是rm-rf节点_模块
- 我删除了节点_模块,清理了缓存,并逐个安装了所有未设置的依赖项和工作,非常感谢。
- 在构建了package.json之后,这对我来说非常有效,这样顶级模块就按顺序排列了下来。在我的情况下,我在升级到[email protected]之后,遇到了react-interpolate-component和react-translate-component的问题,需要react@^15.5.4r的对等机。谢谢你的帮助。在此之前,我还做了一个cache clean。
在一次npm install的时候,WiFi掉了,这发生在我身上。移除node_modules并重新运行npm install将其修复。
- 试试npm cache clean。
- 可能不需要重新安装节点,但是在这样做之间,npm cache clean和删除node_modules,这个建议对我很有用。
- @里奇利特,对我来说,做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'也有类似的问题。
- @五里宫是最高一层。
- rm -rf node_modules && npm cache clean && nvm use && npm i
- 使用rm-r节点_模块而不是rm-rf节点_模块删除节点_模块
我用这些命令行解决了这个问题
- $ rm -rf node_modules/
- $ sudo npm update -g npm
- $ npm install
完成了!
- 在运行sudo-npm update-g-npm之后,我的npm变得毫无用处,任何安装的尝试都会导致"npm err!"找不到模块'read package json'"我要投反对票了
- 它对我和其他人都有效,也许你还有其他问题。尝试安装模块读取包json globally sudo npm install -g read-package-json或重新安装NPM。
- 注意:你不应该在npm中使用sudo,而是建议更改NPM想要写入的目录的权限或所有权。
- 可能还需要在其中添加"npm cache clean"
- 我分享了我的经验,我不知道我应该是专家来分享它,它只是一个NPM模块目录,它不是一个sudo rm -vrfr /如果你有一个解释的话,最好是完成答案并看到你的贡献或是对最好的答案投赞成票,那将是很好的。
- 不要将sudo与NPM一起使用。
- 使用rm-r节点_模块而不是rm-rf节点_模块
- @BinaryJoe01你能解释一下为什么吗?
- @因为rm-rf节点_模块对我不起作用,所以amine haddad,经过一个多小时的搜索,我发现rm-r节点_模块起作用。我在10号窗口。另外,请确保以管理员身份运行节点。
将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的更有效的方法。
- 我在Centos7Repos中发布的NPM版本也有同样的问题。我从node.js安装了最新的NPM版本,问题就消失了,所以我认为你是对的,这可能是旧版本的问题。
即使删除了node_modules目录,上述答案也没有完全帮助我。
下面的命令最终帮助了我:
1
| npm config set registry http://registry.npmjs.org/ |
注意,这会将节点模块拉到不安全的HTTP连接上。
来源:https://stackoverflow.com/a/13119867/4082503
- 这有助于我和我的主机重定向流量。
- @很高兴知道:)
- @德耶尔你也试过其他答案了吗?您可能需要多次运行npm install和/或逐个手动安装一些节点包。
对于每个-- UNMET PEER DEPENDENCY,对于例如-- UNMET PEER DEPENDENCY [email protected],安装与npm install --save [email protected]的依赖项,直到不再有UNMET DEPENDENCIES为止。
祝你好运。
- 给我留下了同样的错误,包括一个新的错误:ERR! code 1。
- @劳特万赫克,你能试试rm -rf node_modules,然后是npm cache clean和npm install吗?如果它仍然不起作用,我建议你再次使用rm -rf node_modules,然后使用npm i -g yarn,然后使用yarn install。纱线是很好的管理方法。祝你好运。
- 是的,这就是peerDependencies的目的。让你有意识地选择这个版本。
这为我解决了问题:
根据错误更正package.json中的版本号;
取下node_modules(rm -rf node_modules);
重新运行npm install。
重复这些步骤,直到不再有错误。
一些类似的事情,我会加上另一个步骤。
请注意,在NPM版本>1.4.9的情况下,"NPM安装"会安装devdependencies。首先尝试删除现有模块和缓存:
1 2
| remove node_modules $ rm -rf node_modules/
run $ npm cache clean |
然后尝试:
1 2
| npm install --dev
npm update --dev |
这至少可以解决递归依赖关系解析。
--dev递归安装devdependencies(及其永久运行..)如何帮助解决版本差异?
您可以尝试删除node_modules文件夹,然后清理NPM缓存,然后再次运行"NPM I"。
我试图在一个运行npm install的自动部署系统上工作,所以很多这些解决方案在自动模式下都不适合我。我无法删除/重新创建node_modules/,也无法轻松更改node.js版本。
所以我最终运行了npm shrinkwrap—将npm-shrinkwrap.json文件添加到我的部署包中,并从中运行安装程序。这为我解决了问题;使用收缩包装文件作为"助手",NPM似乎能够找到正确的包并为我安装它们。(包覆面提取还具有其他功能,但这正是我在这种特定情况下需要的功能)。
我在安装React软件包时遇到了这个问题,这对我很有用:npm install --save
在我的例子中,NPM的更新解决了这个问题。
我运行npm list并安装所有列为未满足依赖项的包。
例如:
├── UNMET DEPENDENCY css-loader@^0.23.1npm install css-loader@^0.23.1
我在安装react native cli时遇到了类似的问题。我不知道在阅读了这里的答案之后,我应该删除哪个/node_modules目录。我终于跑了
npm update -g
之后就可以安装软件包了。
npm install将安装npm-shrinkwrap.json中的所有包,但如果package.json中的包没有预先设置,则可能忽略它们。
如果你的项目有一个npm-shrinkwrap.json,确保你运行npm shrinkwrap来重新生成它,每次你添加/删除/更改package.json。
注意你的角度版本,如果你在角度2.x.x下工作,那么你可能需要升级到角度4.x.x。
有些依赖关系需要角度4
下面是如何安装Angular4或更新项目的教程。
更新到4.0.0
更新到4和将角度依赖项更新到最新版本一样简单,如果您想要动画,请重新检查。这对大多数用例都有效。
Linux/MAC:
1
| npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save |
在Windows上:
1
| 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进口,使用新包装的进口。
1
| import { trigger, state, style, transition, animate } from '@angular/animations';. |