NPM不安装模块依赖项


151

这是我package.json要包含在父项目中的模块的代码:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

需要注意的一件事是,此模块包含在私有仓库中,我将其包含在父package.json类中,例如:"module-name": "git+ssh://git@myserver:user/module-name.git"


您的package.json看起来不错,包括它的行也一样。您是否收到错误消息?git在您的路径上吗?
poida

1
我没有发现任何错误,该模块已安装,但我的postinstall脚本失败,因为grunt未找到本地软件包,因为NPM未安装这些本地软件包
Ahmed Nuaman 2013年

1
该问题在2016年11月仍然存在。我已经在新计算机上全新安装了工作模块。@Mohsen的答案已解决。
乔·拉普

Answers:


152

您似乎遇到了一个已经存在了很长时间并且还没有解决方案的错误。在npm存储库中,这种情况有几个未解决的问题:

在第一个人中,您可以列出几种解决方法。

一种替代解决方案可能是(有点hackish)将依赖项明确列出为第一级依赖项。这需要您维护列表,但是实际上它很少执行。


1
@ Flame2057很高兴知道您不走运,尽管不太了解。您可以继续提出问题,希望社区有解决的知识。玩得开心!
allprog

对我来说,还需要采取另一步骤。在执行此处提到的其他步骤(删除node_modules和package.lock.json,然后进行npm install)之后,我必须在项目中的“ Dependencies”上单击鼠标右键,然后选择“ Restore Packages”。
Taersious

113

我遇到了非常类似的问题,删除整个node_modules文件夹并重新安装对我来说很有用。从IT Crowd表演中学到了这个技巧!

rm -rf node_modules
npm install

这实际上为我工作。我认为这真的很奇怪-是什么引起了这种故障?无论如何,如果我删除该文件夹并重新运行npm install,则它可以工作。事先,该子目录中不会安装任何内容。现在,所有东西都安装在那里。
CtheGood 2015年

谢谢@Moshen。我删除了旧版本的Node并进行了全新安装。我全局删除了所有我的node_modules /,但是忘记从某些现有应用程序中删除。我必须删除每个现有应用程序目录中的node_modules文件夹,然后运行npm install
wilblack

好旧的“您是否尝试过从头开始重新启动?”。这对我来说很棒。
MarcoAurélioDeleu 16年

很高兴知道有一种解决方法,但这确实带有“重新启动计算机并重试”的提示,并且隐藏了真正的问题。我在安装NPM时遇到了类似的问题(进程立即退出,没有任何消息),解决方法之一是删除node_modules文件夹并重新安装。这让我不敢相信我们了解这里发生了什么。
凯利·法国

1
这对我有用。如果可以,我可以再次+1以获取IT人群参考。
texelate

32

我正在使用Windows机器。

  1. 我删除了node_modules文件夹。
  2. 不知何故,正在创建package.lock.json文件。我删除了那个文件。
  3. 然后安装npm。
  4. 干净的构建。
  5. 跑。

14
这个答案需要得到更多的爱。该package.lock.json文件搞砸了我。
mwilcox

16

如果您继承了此代码,则可能是依赖性和版本已锁定,并且您有一个./npm-shrinkwrap.json文件。

如果您的依存关系未在该文件中列出,则将永远不会使用该npm install命令进行安装。

您将需要手动安装软件包,然后运行npm shrinkwrap以更新收缩包装文件。


2
我遇到一个问题,在手动package-lock.json更新到节点8.0.0和npm 5.0.0之后,手动安装软件包会创建一个文件。在那之后,运行npm install将只安装该一个软件包,而不安装我所有的依赖项。删除package-lock.json并重新运行npm install对我来说解决了这个问题。
6

1
@Monkpit那也为我解决了,谢谢!package-lock.json正在妨碍。
VirtualWolf

10

我怀疑您遇到的问题是您的package.json文件与不在同一个目录中Gruntfile.js。当您运行grunt xxx命令时,会出现错误消息,例如:

Local Npm module "xxx" not found. Is it installed?

目前,解决方案是:

  • 在与Gruntfile.js相同的目录中创建package.json
  • 定义您的grunt项目所需的模块
  • 执行npm install以将其本地加载
  • 现在所需的grunt命令应该可以工作了。

恕我直言,令人遗憾的是,我们无法从父级npm模块(即,同一项目内父目录中的package.json)加载灵敏的解析模块。这里的讨论似乎表明这样做是为了避免加载“全局”模块,但是我想我们想要的是从“我的项目”模块中加载。


这就是我的父项目的结构(就是导入子模块项目的结构):cl.ly/image/020E0b3I0t1A和我的子模块项目的结构:cl.ly/image/2q0L3l1v0s40 ; 您会看到两者都包含Gruntfile.js并且都包含package.json在同一级别。
艾哈迈德·努阿曼

1
这不是grunt问题,npm不是在子模块项目中递归安装依赖关系的问题。
艾哈迈德·努阿曼

9

OP对于较旧版本的节点可能是正确的。但是,我在节点4.4.1上也面临同样的问题。

它很可能链接到您正在使用的节点版本。尝试升级到最新版本。如果某些依赖项与节点版本不兼容,则不会临时加载。

我通过运行发现了这一点npm update

升级到最新版本(4.4-> 5.9)后;这是固定的。


8

就我而言,它有助于删除node_modulespackage-lock.json

之后,只需使用重新安装所有内容即可npm install


8

还要检查您的包裹名称是否被正确接受:

错误:

{
    "name":"My Awesome Package"
}


正确

{
    "name": "my-awesome-package-name"
}

1
是的,我的名字中有一个空格,但安装不正确。
Ansjovis86

1
不仅是为了空间,还与他在名称中使用的“-”有关,我也遇到了同样的问题,即以-或_命名,它将起作用。
molagbal

4

您可能需要安装grunt-cli,请在进行npm安装之前尝试以下操作:

sudo npm install -g grunt-cli

修复了grunt不会为我退出的问题,您还需要一个有效的grunt文件。

资料来源:https : //stackoverflow.com/a/16456467/241294


当您在命令提示符下尝试命令“ grunt”时会发生什么?它在您的路径上存在吗?没错,它看起来确实是从pastebin安装的。您是否使用sudo和-g安装了它?
poida

~ ᐅ which grunt /opt/local/bin/grunt
咕gr

另外,当我克隆存储库本身时,而不是通过NPM并运行npm installand grunt install,它可以正常工作。问题在于,NPM似乎没有按照package.json
Ahmed Nuaman的

您在哪个目录中查找软件包依赖关系?它们不应位于顶层,而应位于顶层软件包/ node_modules /模块名称/ node_modules下。可能是grunt因为在错误的目录中工作而找不到grunt文件吗?
poida

这不是问题grunt,当您使用NPM安装模块时,通常会在已安装该模块的任何依赖项结尾提供一个总结。当我安装有问题的模块时,我没有收到任何已安装的依赖模块的总结。
艾哈迈德·努阿曼2013年

4

以防万一有人遭受这种困境并碰巧犯了和我一样的asanine错误,这就是我的情况。在将我的头撞在墙上一个小时之后,我意识到我的json嵌套不正确,并且关键“依赖项”位于关键“存储库”中。
不用说,没有明显的错误,也没有安装任何模块。


3

解决此问题的另一种方法是将其添加到模块package.json脚本部分

"preinstall": "npm install {Packages You depend on}"

这将执行的操作是,它将安装该模块所需的所有软件包,并且不会出现该错误。


3

发生在旧版本的节点上。使用最新版本的节点,如下所示:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

编辑:还要确保您save
例如:npm install yourmoduleName --save


2

我在Windows上安装干净的Node dev环境时收到此错误。

为了解决这个问题,我进入了新的项目目录(我刚刚脚手架yo angular),并输入了两个命令:

npm install -g grunt --save-dev

这会将本地grunt依赖项安装到您的项目中。下一个:

npm install

这将确保安装所有(新)项目依赖项。

多田


2

值得一提的是要确保您的依赖项应dependencies属于您的部分package.json(而不是devDependencies)。

我的问题与OP基本相同:

  • repo1通过"module-name": "git+ssh://git@myserver:user/my-repo-name.git"其他仓库(我们称之为repo2)安装一个私有仓库(我们称之为),
  • repo2node_modules,从一个包的依赖repo1是不存在。
  • 我的愚蠢错误!.. repo1列出了该依赖关系devDependencies而不是dependencies
  • 将我repo1的的依赖关系package.jsondevDependencies 移至dependencies
  • 在我的中repo2,我删除了node_modulespackage-lock.json,确实npm install存在依赖项!

我在npm install命令上方的Dockerfile中声明了NODE_ENV = production环境变量,这导致未安装devDependencies
Pieter De Clercq

0

我有同样的问题。但是在同一台机器上,一个项目具有良好的package.json,在其中我的所有依赖项均已成功安装。在另一个项目中,无论我做什么,都没有安装我的package.json依赖项。我只是复制了package.json并粘贴到了另一个项目中。而且有效!我发现的区别只是文件开头的空行。不知道或它影响什么,也许是其他问题。但是问题只在于package.json文件。


0

我认为我也遇到了这个问题,找到的最佳解决方案是查看控制台,找出抛出的错误。因此,我仔细阅读了一下,发现问题是我没有在中指定我的存储库,描述和有效名称package.json。我添加了这些信息,一切正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.