如何管理同一个 NPM 依赖的多个版本?

How to manage multiple versions of the same NPM dependency?

情况

我写了一堆D3.js charts using the latest version of D3 (4.9.1)

不过我还需要偶尔添加 C3.js chart in my app, problem is- C3 requires D3 v3.5.0

关于项目

我的项目使用 MEAN (with Angular 4) stack, and I've been using Bower 来管理前端依赖项。

到目前为止我考虑了什么

问题

是否可以干净地管理同一依赖项的多个版本? 如果不是,什么是明智的解决方法?

TLDR

Aliased versions of a dependency can be created with both NPM or Yarn using:

npm install <package_name_alias>@npm:<package_name>

简介

同一个依赖有多个版本,如果能帮上忙的话,确实不太理想。 但是,例如,如果您正在迁移到给定软件包的最新版本,同时在此期间继续支持遗留功能,那么这可能是必要的。

确保您使用的是最新版本的 NPM(至少 v6.9.0 添加了对此的支持)。

安装

因此,例如,要同时安装 Vue 2 和带有 NPN package aliases 的最新 Vue 3,我们会这样做:

npm i vue
npm i vue-legacy@npm:vue@2.6.14

或者,使用纱线:

yarn add vue
yarn add vue-legacy@npm:vue@2.6.14

导入

然后,当需要使用依赖项时,

import Vue from 'vue'; // Will use the latest version
import Vue from 'vue-legacy'; // Will use V 2.6.14

Package.json

在 package.json 中,它看起来像:

"dependencies": {
  "vue": "^3.2.33",
  "vue-legacy": "npm:vue@^2.6.14"
}

您也可以手动将其添加到您的 package.json 中,删除锁定文件,然后 运行 npm install / yarn 获取

其他来源

您也可以使用此方法直接从 GitHub 安装软件包。获取特定版本很有用,即使尚未发布到 NPM,或者如果您希望使用自己的项目分支。

npm install package-name@github:username/repository