Залежити від гілки або тегу, використовуючи 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
Станом на npm 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 чи можу я зробити те ж саме для запиту на тягу? Якщо так, то як команда?
круглий кролик

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

136

коментар @ @ dantheta:

Станом на npm 1.1.65, URL Github може бути більш стислим користувачем / проектом. npmjs.org/doc/files/package.json.html Ви можете приєднати гілку, як користувач / проект # гілка

Тому

"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-dependitions

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

Команда-ish може бути будь-яким тегом, sha або гілкою, які можуть бути подані як аргумент для git checkout. За замовчуванням - головний.

URL-адреси GitHub

З версії 1.1.65 ви можете посилатися на URL-адреси GitHub як просто "foo": "user / foo-project". Так само, як і в URL-адресах git, може бути включений суфікс на виконання комісії. Наприклад:

{"name": "foo",
"version": "0.0.0",
"залежності": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}


2
Залежно від фіксації, ша1 повинен бути кращим варіантом, особливо якщо ви залежите від репо, який не є під вашим контролем. Гілки Git та теги не є незмінними (їх можна видалити / змінити, зловмисно / випадково), хоча створити ша1 зіткнення (майже) неможливо.
jakub.g

1
Чи можу я мати філію І зобов’язання для здійснення іш?
мансардне крісло

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 та ліцензія. Папок src та dist немає.
StalkAlex

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

@vortex дякую, що ти маєш на увазі саме під тегом? Як це робить таку проблему?
StalkAlex

0

Якщо це комусь допомагає, я спробував усе вище (https w / token mode) - і все одно нічого не вийшло. У мене немає помилок, але нічого не буде встановлено в node_modules або package_lock.json. Якби я змінив маркер або будь-яку літеру у назві репо або ім'я користувача тощо - я отримав би помилку. Тож я знав, що маю право маркер і ім’я репо.

Я нарешті зрозумів, що це тому, що назва залежності, яку я мав у своєму пакеті.json, не збігалася з ім'ям у package.json репо, яке я намагався витягнути. Навіть npm install --verbose не говорить про те, що немає проблем. Це, здається, ігнорує залежність без помилки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.