При установке пакета с NPM вы можете сказать, что он использует другую версию одной из своих зависимостей?

Предположим, вы хотите установить библиотеку lib-a, которая имеет зависимости dep-1 и dep-2. Если lib-a объявила в своем пакете .json использовать устаревшую версию dep-2 (скажем, она не работает на node 0.8.0, которая только что вышла), но есть ветвь dep-2, который работает с node 0.8.0 - название ветки node0.8.0.

Итак, пакеты в уравнении:

git://github.com/user-a/lib-a
git://github.com/user-b/dep-1
git://github.com/user-c/dep-2
git://github.com/user-c/dep-2#node0.8.0

Есть ли способ сказать NPM установить lib-a, но использовать dep-2#node0.8.0 вместо dep-2?

С помощью NPM вы можете установить определенную ветку проекта следующим образом:

npm install git://github.com/user-c/dep-2#node0.8.0

И если бы я настроил package.json из lib-a, вы могли бы сказать ему использовать dep-2#node0.8.0 следующим образом:

{
  "name": "lib-a",
  "dependencies": {
    "dep-1": ">= 1.5.0",
    "dep-2": "git://github.com/user-c/dep-2#node0.8.0"
  }
}

Изменив package.json, вы можете запустить

npm install lib-a

и он установит ветвь node 0.8.0 dep-2. Но для этого требуется доступ к модификации lib-a, что для моего конкретного случая я не делаю. С технической точки зрения я мог бы раскошелиться lib-a и сделать вышеуказанное изменение package.json. Но в моем конкретном случае lib-a является зависимостью другой библиотеки, поэтому мне пришлось бы раскодировать проект, на который он ссылался, и дальше и дальше...

Итак, вопрос в том, есть ли способ сказать NPM установить lib-a и сказать ему использовать ветвь node0.8.0 dep-2? Что-то вроде этого:

npm install lib-a --overrides dep-2:git://github.com/user-c/dep-2#node0.8.0

Это было бы потрясающе. Если это невозможно, то было бы хорошо знать, поэтому я могу подготовиться к тому, чтобы развернуть/настроить цепочку проектов.

Ответ 1

Синтаксис установки NPM:

npm install (with no args in a package dir)
npm install <tarball file>
npm install <tarball url>
npm install <folder>
npm install [@<scope>/]<name> [--save|--save-dev|--save-optional] [--save-exact]
npm install [@<scope>/]<name>@<tag>
npm install [@<scope>/]<name>@<version>
npm install [@<scope>/]<name>@<version range>
npm i (with any of the previous argument usage)

чтобы вы могли выбрать один из этих методов для установки своих модулей.

Случай простейшего способа установки конкретной версии:

npm install [email protected]

Дополнительная информация: https://docs.npmjs.com/cli/install