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

6

假设我在package.json文件中有以下的依赖项:

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

假设当前包A的版本为3.0.0,但是我需要在我的项目中使用版本1.0.0A,因此我在package.json中明确指定它。

假设现在我需要在我的项目中引入另一个依赖于A的包B。最新版本的B也是3.0.0,但它与"A": "1.0.0"不兼容。与"A": "1.0.0"兼容的正确版本的B应该是"B": "1.0.0"

问题是 -

如何检测与"A":"1.0.0"兼容的包B的版本?

是否有一种自动安装依赖于A并且与"A": "1.0.0"兼容的版本的包的方法?

4个回答

2

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下面。

因此,如果你使用的依赖关系编写得很好,你就不需要手动处理这些问题。

可以在这里找到更多关于这种行为的信息。


2

不可以在安装Node包时安装兼容的包。您必须在package.json中手动指定它们。


但是,您可以尝试以下方法:

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

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

  3. 不指定主包的依赖模块版本。
  4. 安装依赖项。npm install DEPENDENCY_PACKAGE

这可能会起作用,因为据我所记得,我曾只定义了主软件包而未定义其依赖软件包,并采用上述方法安装了兼容版本。(我已定义了node引擎版本。但我不能完全确定这种方法是否也适用于其他软件包。)

尝试一下并告诉我这是否适用于您。


1
如果您在项目中强制指定B依赖项,则npm会安装您强制指定的版本。
例如:
"dependencies": {
    "A": "1.0.0",
    "B": "1.0.0"
}

NPM将在您的项目中安装B 1.0.0。
我尝试使用NPM创建一个项目。
...
"dependencies": {
   "rxjs": "5.0.1",
   "chai": "4.1.0"
},
...

Rxjs在chai包中有一个版本依赖项,固定为4.1.2。
我在我的package.json中强制使用了4.1.0,并通过npm安装了该版本。

0

在尝试为webpack 4安装style-loader时遇到了问题。

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

使用npm install style-loader尝试安装时,提示:

npm ERR! Could not resolve dependency:
npm ERR! peer webpack@"^5.0.0" from style-loader@3.3.1

试着降低版本号直至安装成功:

npm install style-loader@\<3.3.0

npm ERR! Could not resolve dependency:
npm ERR! peer webpack@"^5.0.0" from style-loader@3.2.1
npm ERR! node_modules/style-loader
npm ERR! style-loader@"<3.3.0" from the root project

依次执行npm install style-loader@\<3.2.0等命令,直到模块安装成功。

package.json显示已安装版本2.0.0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接