为什么我的" npm安装"下载了很多我没有指定的多余库?

时间:2017-01-30 17:13:54

标签: javascript json npm mean

这是我的package.json依赖项数组:

{
  "cookie-parser": "~1.0.1",
  "body-parser": "~1.0.0",
  "express": "~3.5.0",
  "socket.io":"1.0",
  "mongodb":"2.2.21",
  "request":"2.79.0", 
  "q":"1.4.1", 
  "bcryptjs":"2.4.0", 
  "jsonwebtoken":"7.2.1",
  "lodash":"4.17.4",
  "express-jwt": "5.1.0"
}

然后当我执行NPM安装时,这是输出: http://imgur.com/fyEHUcI

为什么我会得到所有这些?在一台PC上,我只得到了我要求的依赖项,但在我的笔记本电脑上,我得到了所有这些。我很迷茫。我也有输出,但粘贴在这里看起来很难看。

3 个答案:

答案 0 :(得分:3)

您正在安装的软件包具有依赖项 - 这意味着在安装它们时,您还要安装它们的依赖项。

答案 1 :(得分:1)

我继续使用您的依赖项创建了一个模拟package.json并执行了npm install

实际上,实际显示的包是列出的包,但是npm ls将显示安装那些依赖项的所有依赖项,如 Pineda 在评论你的问题。

您可以使用npm ls查看依赖关系结构。完整文档可在此处找到:https://docs.npmjs.com/cli/ls

答案 2 :(得分:1)

为了消除有关包裹的任何奇怪之处(我也会遇到这种情况),最好再次删除node_modules文件夹和npm i。之后,package.json中的依赖项(dev-dependencies和normal-one)的组合应该与命令的输出匹配:npm ls --depth="0"

现在,在您的PC和笔记本电脑上,npm ls --depth="0" 匹配package.json中所有依赖项的组合列表。两者都不能错配,否则这意味着npm变得自我意识并且变得流氓。

现在,SO的读者对您的问题进行了投票,假设您不理解依赖项可能具有依赖关系,而且文件夹来自何处。

我希望情况并非如此,并且你不会因为SO中发生的任何消极情绪而气馁。

另一种可能的情况可能会解释您的情况。

如果您在安装依赖项时忘记添加--save,则依赖项仅保存到node_modules文件夹,但未添加到您的package.json。因此,您可能无意中安装了更多您使用的东西。

当您删除node_modules文件夹并再次安装时,将清除所有依赖项,并且仅安装仅包含在package.json中的内容。这就是我建议首先删除node_modules文件夹的原因。需要注意的是,npm-publishing自动化库(如我首选的np)往往会在发布npm包之前擦除并重新安装依赖项,原因正是如此。 node_modules中可能存在“垃圾”并擦除/重新安装帮助。

我建议在--save上提及this精彩答案。

关于以前的答案,Jonathan提到了npm ls,但我发现除了琐碎的图书馆之外的任何其他东西都不实用 - 滚动太多了。最好使用npm ls --depth="0"来检查依赖项的最高级别。