npm下载多个版本的软件包

npm下载多个版本的软件包,npm,npm-install,node-modules,Npm,Npm Install,Node Modules,在my package.json中,我添加了一个包和另一个包,这是第一个包的依赖项。依赖关系树如下所示: @ | +---+ A@0.0.1 | | | +---+ B@^0.0.1 | +--- B@0.0.2 由于包A在版本^0.0.1中需要B(带插入符号),而项目也需要版本0.0.2中的包B(直接在package.json中),因此在调用npm install后,我希望树将被展平为以下形式: @ | +--- A@0.0.1 | +--- B@0.0.2 但事实并非如此。安装软

在my package.json中,我添加了一个包和另一个包,这是第一个包的依赖项。依赖关系树如下所示:

@
|
+---+ A@0.0.1
|   |
|   +---+ B@^0.0.1
|
+--- B@0.0.2
由于包A在版本^0.0.1中需要B(带插入符号),而项目也需要版本0.0.2中的包B(直接在package.json中),因此在调用
npm install
后,我希望树将被展平为以下形式:

@
|
+--- A@0.0.1
|
+--- B@0.0.2

但事实并非如此。安装软件包后,npm在0.0.2版中为模块a的节点_模块中创建文件夹,在0.0.1版中为模块B的节点_模块中创建文件夹,并在文件夹B下创建另一个0.0.1版中带有插入符号的节点_模块(尽管所需版本中有插入符号)。所以我的问题是:为什么?我错过什么了吗?我是否错误地理解插入符号和波浪符号的用途?我怎样才能强迫npm压平这个结构<代码>npm重复数据消除没有帮助。

您的想法是正确的,但caret对
0
的主要版本的处理方式有所不同:它只允许在修补程序中进行更新,而对于
0.0.x
它根本不允许更新

例如,
^0.0.3
只允许版本为
0.0.3

对于大于或等于0.1.0但小于1.0.0的版本,插入符号采用与波浪线相同的行为,并允许在修补程序版本中具有灵活性(仅限)

例如,
^0.1.3
将允许从
0.1.3
到下一小调
0.2.0
的所有版本

这背后的原因是,在第一个
1.0.0
发行版之前,不同的补丁或次要编号不能保证更改不会中断


您希望得到哪种结果?获取更高版本的b。它在question@Szab~will~而不是^change the behavior?@Antoniossss我明天可以检查它(现在无法访问所需的存储库)-我会让你知道的。但是:^(插入符号)不是匹配所有与(~(波浪号)匹配的+次要版本吗?