在我的package.json中,添加了一个包和另一个与第一个包相关的包。依赖关系树如下所示:
@
|
+---+ A@0.0.1
| |
| +---+ B@^0.0.1
|
+--- B@0.0.2
由于在调用npm install
之后,由于包A需要版本^ 0.0.1(带有插入号)中的B,项目也需要版本0.0.2(直接在package.json中)中的B该树将被展平为以下形式:
@
|
+--- A@0.0.1
|
+--- B@0.0.2
但事实并非如此。安装软件包后,npm在版本0.0.2的模块A的node_modules中创建一个文件夹,在版本0.0.1的模块B的node_modules中创建一个文件夹,并且在文件夹B下,它在版本0.0.1的A中创建另一个node_modules(尽管在所需版本中出现了尖号)。所以我的问题是:为什么?我想念什么吗?我是否错误地理解了插入符号和波浪号的目的?我怎样才能迫使npm使这种结构扁平化? npm dedupe
没有帮助。
答案 0 :(得分:1)
您的想法是正确的,但是插入符号对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
发行版之前,不同的补丁程序或次要版本不能保证所做的更改不会中断。