npm 两次包含不同版本的相同依赖项

npm including same dependency twice with different versions

是否可以在 package.json 中包含相同的依赖项两次,但版本不同:

"dependencies": {
    "projectX-v1.0.0": "ssh://git@github.com/xxx/projectX.git#v1.0.0",
    "projectX-v1.0.1": "ssh://git@github.com/xxx/projectX.git#v1.0.1"
}

我能想到的最好办法是将包含的 projectX 的名称(见上文)更改为 projectX-v1.0.0projectX-v1.0.1 在其 releases/tags 和 package.json 以便在 node_modules 文件夹中得到两个单独的文件夹。

我需要它的原因是以下全方位存储库结构:

/omni/
/omni/frontend
/omni/frontend/projectA
/omni/frontend/projectB
...
/omni/package.json

projectA 将使用 projectX-v1.0.0projectB 将使用 projectX-v1.0.1 (与 browserify 捆绑)

谢谢!

虽然社区有 talked about it extensively. That said, Scott Hardy's npm-install-version 包可以让您将节点模块安装到版本化或自定义目录中,但不适用于 vanilla npm。

NPM 表示他们不打算实现此功能,但我找到了解决方法。我在 github 上分叉了包存储库并重命名了它。然后我使用以下命令将这个新的 repo 作为依赖项安装在我的项目中:

npm i -S git+ssh://git@gitlab.com:<org>/<renamed-project>.git

现在,我可以升级实际的 npm 包并将项目中对它的所有引用更改为新的、重命名的项目 git 存储库依赖项。这是很多额外的工作,但我发现它比切换到 yarn 或其他具有包别名的包管理器更容易。

您可以创建别名:

npm i <package_alias>@npm:<package_name>@<version>

例如

npm i capacitor-core-v2@npm:@capacitor/core@"^2.0.0"

将添加到您的依赖项中

"dependencies": {
    ...
    "capacitor-core-v2": "npm:@capacitor/core@^2.5.0",
}

参考文献: