Зависит от ветки или тега, используя git URL в package.json?


399

Скажем, я разветвил модуль узла с ошибкой и хочу использовать свою фиксированную версию, конечно же, в ветке функций, пока исправление не будет объединено и выпущено.

Как бы я сослался на мою фиксированную версию в dependenciesмоем package.json?

Ответы:


569

Из документов npm :

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

Начиная с версии NPM 1.1.65, вы можете сделать это:

<user>/<project>#<branch>

130
Начиная с версии 1.1.65, URL Github может быть более кратким user/project. npmjs.org/doc/files/package.json.html Вы можете прикрепить ветку какuser/project#branch
dantheta

2
git://github.com/<user>/<project>.git#feature/blahработал, но <user>/<project>.git#feature/blahне ... возможно, их регулярное выражение должно быть более продвинутым, чтобы принять feature/blahво внимание. Это был npmv1.4.28
pulkitsinghal

5
Как вы включаете номер версии?
Ричард

1
@hurrymaplelad могу ли я сделать то же самое для запроса на извлечение? Если так, как команда?
Roundrobin

3
Обновлена ​​ссылка на документацию по NPM docs.npmjs.com/files/package.json#github-urls
kellen

136

за комментарий @ dantheta:

Начиная с версии 1.1.65, URL Github может быть более лаконичным для пользователя / проекта. npmjs.org/doc/files/package.json.html Вы можете прикрепить ветку как user / project # branch

Так

"babel-eslint": "babel/babel-eslint",

Или для тега v1.12.0 на JSCS:

"jscs": "jscs-dev/node-jscs#v1.12.0",

Обратите внимание, что если вы используете npm --save, вы получите более длинный git

С https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URL-адреса как зависимости

URL-адреса Git могут иметь вид:

git: //github.com/user/project.git#commit-ish git + ssh: // user @ hostname: project.git # commit-ish git + ssh: //user@hostname/project.git#commit- ish git + http: //user@hostname/project/blah.git#commit-ish git + https: //user@hostname/project/blah.git#commit-ish

Commit-ish может быть любым тегом, sha или ветвью, которые могут быть предоставлены в качестве аргумента для git checkout. По умолчанию используется мастер.

GitHub URLs

Начиная с версии 1.1.65, вы можете ссылаться на URL GitHub как просто «foo»: «user / foo-project». Как и в случае с git-URL, можно включить суффикс commit-ish. Например:

{"name": "foo",
"version": "0.0.0",
"dependencies": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}


2
В зависимости от коммита sha1 должен быть предпочтительным вариантом, особенно если вы зависите от репо, которое не находится под вашим контролем. Ветви и теги Git не являются неизменными (могут быть удалены / изменены, злонамеренно / случайно), хотя создать (почти) невозможно столкновение sha1.
jakub.g

1
я могу иметь ветку И коммит для коммита?
Munchschair

45

Если вы хотите использовать develили featureветвиться, или вы не опубликовали определенный пакет в реестре NPM, или вы не можете этого сделать, потому что это закрытый модуль, вы можете указать git://URI вместо номера версии в вашем package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://git@github.com:user/repo.git#ref"
}

#refЧасть не является обязательным, и это может быть ветвь (например master), тег (например 0.0.1) или частичной или полной фиксации идентификатор.


26

На последней версии NPM вы можете просто сделать:

npm install gitAuthor/gitRepo#tag

Если репозиторий является действительным пакетом NPM, он будет автоматически именоваться в package.json как:

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

Если бы вы могли добавить это к ответу @justingordon, нет необходимости в ручном совмещении имен!


4
нет, это не так. Он устанавливается неправильно. Каким-то образом он не включает всю структуру каталогов из хранилища, только некоторые файлы, такие как package.json, yarn.lock, readme и license. Нет папок src или dist.
StalkAlex

@StalkAlex docs.npmjs.com/cli/publish, а затем проверьте репозиторий, который вы устанавливаете для сценариев сборки. Может быть, они помечены или пост-установка не работает для вас, это проблема для этого конкретного пакета в любом случае, надеюсь, это поможет!
вихрь

@ vortex спасибо, что вы имеете в виду под тегами? Как это создает такую ​​проблему?
StalkAlex

0

Если это кому-нибудь поможет, я попробовал все выше (https с режимом токена) - и все равно ничего не получалось. Я не получил никаких ошибок, но ничего не будет установлено в node_modules или package_lock.json. Если бы я сменил токен или любую букву в имени репо или имени пользователя и т. Д. - я получил бы ошибку. Я знал, что у меня есть правильный токен и имя репо.

Я наконец понял, что это потому, что имя зависимости, которое было в моем package.json, не совпадало с именем в package.json репозитория, который я пытался получить. Даже установка npm --verbose не говорит о наличии каких-либо проблем. Кажется, что игнорируется зависимость без ошибки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.