NPM peerDependencies 如何指定主要版本范围

时间:2021-02-12 10:09:10

标签: javascript npm webpack

案例

我正在为使用 2 个不同版本的 react-bootstrap 的 2 个项目开发一个通用的 React 组件。

First one: "react-bootstrap": "^0.33.1"
Second one: "react-bootstrap": "^1.0.0-beta.16"

在图书馆的包 json 我有:

{
  "peerDependencies": {
    "react": "^16.13.0",
    "react-bootstrap": "^0.33.1",
    "react-dom": "^16.13.0"
  }
}

该组件适用于两者(这两个版本之间使用的 API 保持不变)。

问题

当我尝试在第二个项目中安装该依赖项时,出现下一个错误:

npm ERR! Could not resolve dependency:
npm ERR! peer react-bootstrap@"^0.33.1" from @company/lib@1.1.6
npm ERR! node_modules/@company/lib
npm ERR!   @company/lib@"1.1.6" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

问题是

如何在 peerDependencies 中指定 lib 可用于 0.33.1 和 1.0.0 版本?无需使用 npm i 标志强制 --force 忽略这些错误。

1 个答案:

答案 0 :(得分:0)

所以,它支持 OR 运算符 "react-bootstrap": "^0.33.1 || ^1.0.0-beta.16"

但它没有解决问题,因为包是使用旧版本构建的。

所以解决方案就是:

  1. 编写 2 个脚本,在 peerDeeps 中用正确的版本修补 package.json 并更改包名称(从 @company/package@company/package-legacy
  2. 更新 CI/CD 管道以构建两个版本的包

不太干净,但效果很好。

相关问题