当想将大部分共用功能抽离成一个包进行管理时,就会想起要是多个项目依赖我这个包,但是我要弃用某一个功能,然后就会影响其他人的使用,当然这种情况还可以不升级包版本来解决。但要是现在版本中有一个新功能又不得不用的时候呢?如何在 NPM 中安装同一包的多个版本?

其实在 npm 6.9.0 就添加了 package aliases 功能,利用包别名的功能就能解决这样冲突问题。

比如现在我项目中用到了 axios 这个包,假设 axios v1.4.0 版本中有个功能在 axios v1.5.0 中被删除了,但是 axios v1.5.0 中有个 bug 修复了我又同时期望更新到这个修复。那么我就可以利用包别名安装方式同时安装 v1.4.0 和 v1.5.0 版本。

npm i axios4@npm:axios@1.4.0 axios5@npm:axios@1.5.0

安装后在 package.json 中就能看到

"dependencies": {
    "axios4": "npm:axios@^1.4.0",
    "axios5": "npm:axios@^1.5.0"
}

这样在代码中分别导入 axios4 和 axios5 就能分别使用两个版本的包了

import { Axios } from 'axios4';
import { Axios as Axios5 } from 'axios5';

参考链接: https://github.com/npm/rfcs/blob/main/implemented/0001-package-aliases.md

参考博客: https://medium.com/weekly-webtips/how-to-install-multiple-versions-of-the-same-package-in-npm-71c29b12e253