我有两个版本的软件包,例如
@mycompany/mylob v2.0.0
和
@mycompany/mylib v3.0.0
3.0.0 版与 2.0.0 版相比有重大更改,但我们目前还没有能力将所有内容升级到 3.0.0。
另一位开发人员升级了内部软件包,例如@mycompany/utils 使用版本 3.0.0 并安装到我们的代码库中,因此现在我们在运行构建时遇到兼容性错误,因为 @mycompany/utils 需要版本 3.0.0,但该存储库中的其余代码需要版本 2.0 .0.
有没有一种方法可以使用yarn/npm为@mycompany/utils安装@mycompany/mylib v3.0.0并让其余代码参考v2.0.0?
您可以使用自定义别名安装:
npm i custom-name:@mycompany/[email protected]
您可以将
custom-name
更改为您想要使用的任何有效包名称。
之后就可以用这个别名导入包了。例如:
require("custom-name")
/import * from "custom-name"
您可以为每个包显式设置依赖关系,它们将被处理。
package.json
{
"name": "project",
"version": "1.0.0",
"dependencies": {
"left-pad": "1.0.0",
"c": "file:../c-1",
"d2": "file:../d2-1"
},
"resolutions": {
"d2/left-pad": "1.1.1",
"c/**/left-pad": "^1.1.2"
}
}
您对 Yarn 的答案就在这里:
对于NPM,似乎没有任何原生解决方案。你可以在这里看看这个答案:
要在 Node.js 项目中安装同一包的多个版本,可以使用 npm 或 YARN 以不同名称安装不同版本的包。以下是实现这一目标的方法:
使用npm:
npm i <your-alias>@npm:<package-name>@<version>
例如,如果您想安装不同版本的
got
模块:
npm i got-cjs@npm:got@11
npm i got-esm@npm:got@12
在你的 package.json 中,它将如下所示:
"dependencies": {
"got-esm": "npm:got@^12.0.0",
"got-cjs": "npm:got@^11.0.0"
}
对于 npm install 特定版本,请使用 npm install [package-name]@[version-number]。