如何强制 npm 3 安装嵌套依赖项?
Posted
技术标签:
【中文标题】如何强制 npm 3 安装嵌套依赖项?【英文标题】:how can I force npm 3 to install nested dependencies? 【发布时间】:2016-01-24 02:27:11 【问题描述】:我刚刚升级到npm version 3,并注意到它所做的最大变化之一是它强制执行flat dependency tree。
您的依赖项现在将安装到最大平面。在可能的情况下,您的所有依赖项及其依赖项以及它们的依赖项都将安装在您项目的
node_modules
文件夹中,并且没有嵌套。只有当两个(或更多)模块具有冲突的依赖关系时,您才会看到相互嵌套的模块。
例如如果包A依赖包B,当你npm install A
你会得到这个文件结构:
--- root/
|--- node_modules/
|--- A/
|--- B/
代替版本 2 或更低版本的旧文件结构:
--- root/
|--- node_modules/
|--- A/
|--- node_modules/
|--- B/
我遇到的第一个(我肯定不是最后一个)问题是:
包 A 不知道 npm v3 的行为,并且依赖于包 B。但是 A 采用旧的 (v2) 文件结构,因为它的代码中有 node_modules/B
,而不是正确的 ../node_modules/B
。现在,来自 A 的代码将无法编译,因为它在错误的目录中寻找 B/
。
如果我不想唠叨开发人员修复代码并等待 A 的更新,我想知道是否可以设置一个选项来强制安装 npm A 的依赖项位于其自己的 node_modules
文件夹中,与 npm v2 的做法相同。
【问题讨论】:
【参考方案1】:你试过--legacy-bundling
换成npm install
吗?
https://docs.npmjs.com/cli/install
--legacy-bundling 参数将导致 npm 安装包,以便 1.4 之前的 npm 版本(例如节点 0.8 中包含的版本)可以安装包。这消除了所有自动重复数据删除。
【讨论】:
【参考方案2】:这就是我睡眠不足时会发生的情况。显而易见的解决方案不知何故让我逃脱了。
$ cd node_modules/A/
$ npm install
$ cd ../../
【讨论】:
我遇到了同样的问题,我希望有一个更好的解决方案,因为使用这个你必须:cd node_modules/A && npm install
然后cd node_modules/A/node_modules/B && npm install
等等......据我了解,所有包都必须遵循 npm 处理依赖项的新方式,然后才能使用 npm 3.0,对吗?
@Gabin 据我所知,你是对的。它使升级依赖项成为一场噩梦。【参考方案3】:
我刚刚遇到了这个问题,并找到了解决此问题的替代方法。由于 Node.js 带有 NPM,我能想到的唯一方法是降级到 Node.js 0.10 版本,该版本带有 NPM 上的旧版本,它将以旧方式安装依赖项。为了降级,我使用了NVM 并运行了nvm use 0.10.0
。您可以按照这个技巧在 npm 版本之间来回切换。希望对您有所帮助!
【讨论】:
我会试试这个,看看它是否有效。另外我相信你的说法“NPM 附带 Node.js”是错误的;相反。 Node 随 npm 一起安装。 是的。我刚刚修好了。谢谢! 谢谢。我认为措辞只是令人困惑。因为当你说“npm 自带node”时,可能意味着npm 自带node 安装,也就是说,当你安装npm 时,你会自动得到node(不正确);或者 npm 与 node 一起安装,即安装 node 会给你一个 npm 的副本(正确)。英语很笨。以上是关于如何强制 npm 3 安装嵌套依赖项?的主要内容,如果未能解决你的问题,请参考以下文章