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

YARN/NPM: installing package versions that are compatible to certain dependency version

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

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

同样,我们假设软件包 A 的当前版本是 3.0.0。但是我的项目中需要 A1.0.0 版本,所以我在 package.json.

中明确指定了它

鉴于此,让我们假设我需要在我的项目中有另一个依赖于 A 的包 BB 的最新版本也是 3.0.0,但与 "A": "1.0.0" 不兼容。与 "A": "1.0.0" 兼容的 B 的正确版本应该是 "B": "1.0.0".

问题是 -

how do I detect what version of package B is compatible with "A":"1.0.0"?

Is there a way to automatically install the versions of packages, that are dependent on A and a compatible with "A": "1.0.0"?

如果您在项目中强制使用 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 在版本 4.1.2 中修复了 chai 包依赖项。

我在 package.json 上强制安装了 4.1.0,npm 安装了 4.1.0 版本

没有。安装节点包时无法安装兼容包。您必须在 package.json.

中手动指定它们

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

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

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

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

这可能行得通,因为据我所知,一旦我定义了主包而不是它的依赖包并执行了前面的方法并安装了兼容版本。 (我已经定义了节点引擎版本。但我不确定这种方法是否也适用于其他包。)

请尝试告诉我这是否适合您。

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

运行 尝试为 webpack 4 安装 style-loader 时出现此问题。

how do I detect what version of package B is compatible with "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版本