“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 依赖项