如何管理一个项目中多个版本的npm模块,让不同的包内部依赖于特定的版本?

Sri*_*Sri 6 npm node-modules reactjs material-ui

我的主要反应项目使用的情况是"@material-ui/core": "^1.5.1",对于我正在尝试构建的新组件,我想使用 #@rjsf/material-ui":"3.2.1" 内部需要最新版本的"@material-ui/core": "4.12.3". 在不影响主项目@material-ui/core版本的情况下,我如何安装这两个版本并强制"@rjsf/material-ui":"3.2.1"引用"@material-ui/core": "4.12.3"

我在这里寻找可能的解决方案,但是"@rjsf/material-ui":"3.2.1", 仍然在内部引用"@material-ui/core": "^1.5.1"并中断。解决这个问题的出路是什么?提前致谢。

Rus*_*ano 8

要在您的环境中安装同一软件包的多个版本,您需要使用称为别名的原则。要应用它,请使用以下命令安装包:

npm i <package_name_alias>@npm:<package_name>
Run Code Online (Sandbox Code Playgroud)

这里,<package_name_alias>是用于通过 JavaScript 文件导入此特定版本的包的名称,并且<package_name>是您想要拥有多个版本的包。

我会给你 npm 包上的例子react-bootstrap。例如,您希望同时拥有基于 Bootstrap 4 和 Bootstrap 5 的版本。因此,您必须执行这些命令:

npm i react-bootstrap-v5@npm:react-bootstrap@2.0.3
npm i react-bootstrap-v4@npm:react-bootstrap@1.6.4
Run Code Online (Sandbox Code Playgroud)

这样,要在 JavaScript 文件中导入基于 Bootstrap 4 的按钮,您需要导入 1.6.4 版本react-bootstrap,并且可以使用其别名来执行此操作:

import { Button } from 'react-bootstrap-v4'
Run Code Online (Sandbox Code Playgroud)

如果您想要基于 Bootstrap 5 的按钮,则导入如下:

import { Button } from 'react-bootstrap-v5'
Run Code Online (Sandbox Code Playgroud)

软件包的一个版本(在您的情况下是@material-ui/core您正在使用的版本)可能保持非别名状态。