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

Допустим, вы хотите установить библиотеку lib-a, которая имеет зависимости dep-1и dep-2. Если lib-aобъявил в своем package.json использование версии dep-2, которая устарела (, скажите, что она не работает на узле 0.8.0, который только что вышел ), но есть ветвь dep-2, которая работает с узлом 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

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

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

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

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

61
задан Lance Pollard 10 May 2017 в 08:50
поделиться