一、问题
举例:项目中使用了公司内部的@xq/a、@xq/b等这些组件,这些组件中都安装了不同版本的axios库,因此,node_modules中就安装了多个版本的axios库。下面是找到的解决方案。
*可以使用npm list xxx查看项目中xxx包的安装树
二、方案
方案一:
从根部解决问题,统一我们所使用的公司所有组件库中使用的axios版本,然后把axios库配置到peerDependencies中,这样的话就会使用我们项目里安装的axios包
存在的问题:
公司很多包都会依赖axios这个包,由于之前没有统一,现在要单独去做这个事情,成本太高。还有axios这个库也是一直在更新的,它一更新,组件库开发那边也需要对这些组件做一遍升级,成本高,缺人力。
暂不考虑成本高的问题,还存在的问题:我们组件里可以把axios配置到peerDependencies中,这样我们在安装公司的组件(例如a组件)时,都会使用我们项目里安装的axios包,但是这也有个问题,就是我们项目里升级了axios组件版本,而公司的npm组件(例如a组件)没有在该版本下测试过的话,也有可能出现组件异常的问题,所以会存在风险的。
所以,该方案不可行。
方案二:
临时方案:package.json配置resolutions统一版本,resolutions允许你复写一个在项目node_modules中被嵌套引用的包的版本。但这样做的前提是版本统一后,不会有兼容问题
“resolutions”: {
“@xq/axios”: “x.x.x”
}
// 这样,项目中用到的axios都会使用resolutions中指定的版本。
存在的问题:
需要测试统一版本后,各组件有没有问题
统一公司所有包的axios版本不可行,但项目中使用的包相对较少,可以考虑这样在项目中进行统一版本,相对可行