让我们想象一下,我在package.json
文件中具有以下依赖项部分:
"dependencies": {
"A": "1.0.0"
}
同样,我们假设软件包A的当前版本为3.0.0
。但是我在项目中需要1.0.0
的{{1}}版本,所以我在A
中明确指定了它。
鉴于此,假设我需要在项目中依赖package.json
的另一个软件包B
。 A
的最新版本也是B
,但与3.0.0
不兼容。与"A": "1.0.0"
兼容的B
的正确版本为"A": "1.0.0"
。
问题是-
如何检测软件包
"B": "1.0.0"
的哪个版本与B
兼容?有没有一种方法可以自动安装以下版本 包,这些包依赖于
"A":"1.0.0"
并与A
兼容?
答案 0 :(得分:1)
如果在项目中强制使用B依赖性,则npm安装您强制使用的版本。
例如
"dependencies": {
"A": "1.0.0",
"B": "1.0.0"
}
NPM将在您的项目中安装B 1.0.0。
要说我试图用创建一个项目
...
"dependencies": {
"rxjs": "5.0.1",
"chai": "4.1.0"
},
...
Rxjs的chai软件包依赖项已在4.1.2版本中修复。
我在package.json
上强行安装了4.1.0,npm安装了4.1.0版本。
答案 1 :(得分:1)
不。在安装节点软件包时,无法安装兼容的软件包。您必须在package.json中手动指定它们。
但是,您可以尝试以下操作:
在package.json中仅为您的一个主软件包定义特定的软件包版本。
安装依赖项(主软件包)。 npm install
npm install DEPENDENCY_PACKAGE
之所以可行,是因为据我所知,一旦我定义了主软件包而不是其从属软件包,并采用了前面的方法并安装了兼容版本。 (我已经定义了节点引擎版本。但是我不确定该方法是否也适用于其他软件包。)
请尝试让我知道这是否适合您。
答案 2 :(得分:1)
B
应该定义自己对特定版本A
的依赖,例如0.0.1
。在这种情况下,当您进行npm/yarn install
时,假设您有package.json
,例如:
"dependencies": {
"A": "1.0.0"
"B": "1.0.0"
}
A@1.0.0
,B@1.0.0
将被安装,因为B声明需要A@0.0.1
,
A@0.0.1
也将安装,但位于node_modules/B
下。因此,如果您使用的依赖项写得很好,则无需手动处理此类问题。
有关此行为的更多信息,请参见here。