【问题标题】:Why does installing one npm package add many subfolders in node_modules?为什么安装一个 npm 包会在 node_modules 中添加许多子文件夹?
【发布时间】:2016-01-02 06:14:33
【问题描述】:

我已经更新了我在 grunt 项目中使用的 node / npm。

但是,当我现在想将包添加到项目 myproject/(例如 npm install grunt-favicon)时,它似乎向 myproject/node_modules/ 添加了数百个文件夹,而它只用于添加一个 - 通常以诸如 @987654326 之类的 grunt 为前缀@。

我对这些东西的了解是基本的,但这些似乎是必需的依赖项,甚至其中一些项目有更多的依赖项。

不应该在其他地方添加这些依赖项吗?如果是这样,我该如何纠正?

我使用npm 3.3.5node 4.1.1grunt-cli v0.1.13grunt v0.4.5

这个截图在左边显示~/.npm,然后在右边显示~/myproject/node_modules

【问题讨论】:

    标签: node.js path npm dependencies


    【解决方案1】:

    这是正确的,不要担心。您仍在本地安装软件包,只是目录结构看起来有点不同。这是 在 npm v3.0.0 中更改的行为:现在所有依赖项的依赖项都直接安装在 node_modules 文件夹中(只要这不会导致版本冲突)。这大大减小了文件树的大小。

    来自npm 3.0.0 release notes

    平坦,平坦,平坦!

    您的依赖项现在将安装到最大平面。在可能的情况下,您的所有依赖项及其依赖项以及它们的依赖项都将安装在您项目的 node_modules 文件夹中,没有嵌套。只有当两个(或更多)模块具有冲突的依赖关系时,您才会看到相互嵌套的模块。

    【讨论】:

    • 感谢 m01 - 我想如果这些是全局的(在 ~/.npm 中)只要一次就可以避免它们必须在每个项目/node_modules/ 文件夹中复制?
    • 没有。这里的重点是不要多次安装项目依赖项的依赖项。例如,在 npm v2 中,全新安装的 gulp-imagemin 包含 stream 模块的 59 个副本,位于 node_modules 目录树的不同位置。荒谬,不是吗?现在,使用 npm v3,您只会得到一个副本。
    • 我明白了 - 我正在考虑在不同项目中重复的 node_modules...
    • @m01 如果我想强制安装嵌套的依赖树怎么办?就像包 A 一样,它不知道 npm@v3 的行为并且依赖于包 B,假设 B 将安装在 @ 987654327@ 而不是 /node_modules/B?
    • 我猜你在这里找到了解决方案:stackoverflow.com/questions/33321181/… ;)
    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 2020-07-25
    • 2016-10-03
    • 2011-11-07
    • 2019-04-13
    • 2020-03-28
    • 2013-12-24
    • 2016-03-25
    相关资源
    最近更新 更多