“npm install” 将所有依赖项安装在 node_modules 目录中,而不是嵌套它们

Posted

技术标签:

【中文标题】“npm install” 将所有依赖项安装在 node_modules 目录中,而不是嵌套它们【英文标题】:"npm install" installs all dependencies in node_modules directory, instead of having them nested 【发布时间】:2016-01-14 06:47:51 【问题描述】:

我需要知道以下行为是否正常。

当我npm install 时,我的 package.json 中的每个包和依赖项,不再安装 nested,但每个依赖项都安装在 @ 987654324@ 目录。这让我的node_modules 目录被炸毁,看起来像这样:

这发生在我更新了 npm 和 node 之后。

现在我运行:

npm -v 3.3.6
node -v 4.2.1
python 2.7
windows 7
wamp

我的package.json 文件如下所示:


  "private": true,
  "devDependencies": 
    "gulp": "^3.8.8"
  ,
  "dependencies": 
    "laravel-elixir": "^3.0.0",
    "bootstrap-sass": "^3.0.0"
  

这是标准的 laravel package.json 文件。

有没有办法再次嵌套目录,因为我不喜欢这种有100多个子目录的吹文章。

【问题讨论】:

【参考方案1】:

这是npm 3 根据this npm blog 的行为。

【讨论】:

谢谢 sagie,我想没有办法让它再次嵌套以避免臃肿的目录,是吗? (也必须等待 5 分钟,然后才能接受您的正确答案) 在我看来,Flat 更好。作为 Windows 用户,删除太多嵌套模块真的很可怕,因为它通过 256 个最大字符非常快(或者是 1024,不记得了)。当您升级模块时,我也有帮助,因为现在它能够更好地重用现有安装,并且不会替换您升级的模块下的所有内容,因为它的依赖关系可能没有改变。最重要的是,这种方式更快更清洁。 我一直在尝试对 NPM 进行故障排除,哈哈……很高兴我遇到了这个问题,否则我仍然会寻找解决方案 =) @LoveAndHappiness 其实有。看我的回答。【参考方案2】:

更新:正如 Erik Pukinskis 在 cmets 中提到的: 从 npm 3.5 开始,已放弃对 --legacy-bundling 的支持。


是的,有一种方法可以通过更改 npm(撰写本文时的版本 3)的默认行为来再次嵌套目录:

    删除当前存在的node_modules文件夹。

    告诉 npm 使用旧版捆绑进行安装:

    npm install --legacy-bundling

“永久”替代方案:

    将您的 npm 配置设置为始终使用旧版捆绑...

    npm set legacy-bundling=true

    .. 照常运行:

    npm install

注意:使用旧版捆绑获取依赖项将花费更多时间,因为将安装相同依赖项的许多不同版本。

免责声明:作为非 Windows 用户,我不需要平面依赖项,而是希望轻松找到自我声明的依赖项以支持自动重复数据删除。由于在没有传统捆绑的情况下安装 npm 依赖项已经花费了大量时间,我通常愿意花费这些额外的安装时间。它在 Laravel Elixir 设置中从之前的 700+ (...) 恢复到 5 个目录,并添加了 bootstrap(非 sass)、font-awesome 和 jquery。

【讨论】:

这个答案对我的具体情况非常有用。在这里为后代描述:我一直在尝试为现有节点项目构建带有依赖项的 package.json。使用 npm install <list of packages I require> --legacy-bundling --save 仅将直接依赖项写入 package.json。然后我做了rm -rf node_modules && npm install,以取回新的平面 node_modules 目录。这对我来说是两全其美。 我也认为这是正确的答案,因为它直接肯定地回答了 OP 从 npm 3.5 开始,已放弃对 --legacy-bundling 的支持。 我可以在 npm docs 和 github 存储库中选择它github.com/npm/cli/blob/…

以上是关于“npm install” 将所有依赖项安装在 node_modules 目录中,而不是嵌套它们的主要内容,如果未能解决你的问题,请参考以下文章

为啥“npm install”告诉我“没有安装你必须自己安装对等依赖项:”?

如何使用 npm install 或 yarn 仅安装具有自己版本的 package.json 依赖项

npm install 具有主要和次要版本依赖项

npm install:无法在 Windows 10 中安装依赖项

几种npm install 的区别

私有 github repo 作为依赖在 npm install 上是无关的