对于内部依赖特定版本的不同包,如何管理项目中多个版本的 npm 模块?
Posted
技术标签:
【中文标题】对于内部依赖特定版本的不同包,如何管理项目中多个版本的 npm 模块?【英文标题】:How to manage multiple versions of npm modules in a project for different packages internally dependent on specific versions? 【发布时间】:2022-01-13 02:40:32 【问题描述】:我的主要反应项目使用 "@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 英寸?
I looked here 寻找可能的解决方案,但 "@rjsf/material-ui":"3.2.1" 在内部仍然引用 "@material-ui/core": "^1.5.1" 并中断。这个问题的出路是什么?提前致谢。
【问题讨论】:
【参考方案1】:要在您的环境中安装同一软件包的多个版本,您需要使用一种称为别名的原则。要应用它,请使用以下命令安装包:
npm i <package_name_alias>@npm:<package_name>
这里,<package_name_alias>
是用于通过 javascript 文件导入此特定版本包的名称,<package_name>
是您想要拥有多个版本的包。
我会给你一个关于react-bootstrap
npm 包的例子。例如,您希望同时拥有基于 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
这样,要在您的 JavaScript 文件中导入基于 Bootstrap 4 的按钮,您需要导入 react-bootstrap
的 1.6.4 版本,您将使用其别名来实现:
import Button from 'react-bootstrap-v4'
如果您想要基于 Bootstrap 5 的按钮,您的导入将如下:
import Button from 'react-bootstrap-v5'
软件包的一个版本(在您的情况下是您正在使用的 @material-ui/core
版本)可能保持无别名。
【讨论】:
'@rjsf/material-ui' 期待最新版本的 @material-ui/core 及其中断。 你可能在 package-lock.json 的某个地方破坏了依赖链。因此我建议您删除 package-lock.json,删除整个 node_modules 文件夹,应用别名,然后运行 npm i
重新安装项目的依赖项。以上是关于对于内部依赖特定版本的不同包,如何管理项目中多个版本的 npm 模块?的主要内容,如果未能解决你的问题,请参考以下文章