对于内部依赖特定版本的不同包,如何管理项目中多个版本的 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>

这里,&lt;package_name_alias&gt; 是用于通过 javascript 文件导入此特定版本包的名称,&lt;package_name&gt; 是您想要拥有多个版本的包。

我会给你一个关于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 模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何添加Hadoop依赖通过Maven

node可以同时用多个框架吗.js

python怎么安装anacoda

如何为不同的 SDK 目标管理同一类文件的多个版本?

nodejs的package.json依赖dependencies中 ^ 和 ~ 的区别

Yarn依赖与版本