YARN / NPM:安装与某些依赖版本兼容的软件包版本

时间:2018-07-27 15:18:12

标签: javascript npm yarnpkg

让我们想象一下,我在package.json文件中具有以下依赖项部分:

  "dependencies": {
    "A": "1.0.0"
  }

同样,我们假设软件包A的当前版本为3.0.0。但是我在项目中需要1.0.0的{​​{1}}版本,所以我在A中明确指定了它。

鉴于此,假设我需要在项目中依赖package.json的另一个软件包BA的最新版本也是B,但与3.0.0不兼容。与"A": "1.0.0"兼容的B的正确版本为"A": "1.0.0"

问题是-

  

如何检测软件包"B": "1.0.0"的哪个版本与B兼容?

     

有没有一种方法可以自动安装以下版本   包,这些包依赖于"A":"1.0.0"并与A兼容?

3 个答案:

答案 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中手动指定它们。


但是,您可以尝试以下操作:

  1. 在package.json中仅为您的一个主软件包定义特定的软件包版本。

  2. 安装依赖项(主软件包)。 npm install

  3. 不指定主程序包的依赖模块版本。
  4. 安装依赖项。 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"
  }
  1. A@1.0.0B@1.0.0将被安装,

因为B声明需要A@0.0.1

  1. A@0.0.1也将安装,但位于node_modules/B下。

因此,如果您使用的依赖项写得很好,则无需手动处理此类问题。

有关此行为的更多信息,请参见here