Npm установить из Git в определенной версии
Предположим, что я написал модуль для Node.js, который я хотел бы сохранить приватным. Я знаю, что я могу (должен) добавить строку:
"private": "true"
в файл package.json
, и я также знаю, что могу npm install
этот модуль использовать путь к файловой системе или ссылку на репозиторий git, включая GitHub.
Я также знаю, что я могу поместить такой путь файловой системы или ссылку на репозиторий git в package.json
, так что часть dependencies
может выглядеть примерно так:
"dependencies": {
"myprivatemodule": "[email protected]:..."
}
Теперь я хочу не связываться с последней версией, а с конкретным. Единственная возможность, о которой я знаю, - это связать конкретную фиксацию с использованием ее идентификатора. Но это менее читаемо и хуже обслуживается, чем использование номера версии, например 0.3.1
.
Итак, мой вопрос: можно ли в любом случае указать такой номер версии и заставить npm искать репозиторий git для последней фиксации, которая включает эту версию?
Если нет, как вы решаете эту проблему в своих проектах? Вы живете с идентификаторами фиксации или есть лучшее решение для этого?
Ответы
Ответ 1
A зависимость должна быть доступна из registry
для установки только с указанием дескриптора version
.
Вы можете создать и использовать свой собственный реестр вместо registry.npmjs.org
, если ваши проекты должны " публично публиковать.
Но если это не в реестре, на него нужно будет ссылаться URL или Git URL. Чтобы указать версию с URL-адресом Git, включите соответствующий <commit-ish>
, например тег, в конце как Фрагмент URL.
Пример, для тега с именем 0.3.1
:
"dependencies": {
"myprivatemodule": "[email protected]:...#0.3.1"
}
Примечание. В приведенном выше фрагменте показан базовый URL-адрес, аналогичный тому, который был опубликован в вопросе.
Отрезанная часть (...
) должна быть заполнена:
"myprivatemodule": "[email protected]:{owner}/{project}.git#0.3.1"
И другой формат адреса будет необходим, если доступ к SSH недоступен:
"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"
В зависимости от вашей ОС вы также можете link
в зависимости от другой папки, в которой вы клонировали ее из Github.
Ответ 2
Принятый ответ не работал для меня. Вот что я делаю, чтобы вытащить пакет из github:
npm install --save "git://github.com/username/package.git#commit"
Или добавив его вручную в package.json:
"dependencies": {
"package": "git://github.com/username/package.git#commit"
}
Ответ 3
Если по версии вы имеете в виду тег или выпуск, тогда github предоставляет ссылки для загрузки. Например, если я хочу установить fetch версию 0.3.2 (она недоступна в npm), то я добавляю к своему package.json
под dependencies
:
"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",
Единственный недостаток, по сравнению с хеш-алгоритмом фиксации, заключается в том, что хэш гарантированно не представляет собой измененный код, тогда как тег можно заменить. К счастью, это редко случается.
Update:
В наши дни подход, который я использую, представляет собой компактную нотацию для обслуживаемой службой GitHub:
"dependencies": {
"package": "github:username/package#commit"
}
Если фиксация может быть чем-то обязательным, например тегом. В случае GitHub вы даже можете удалить начальный github:
, поскольку он по умолчанию.
Ответ 4
Мой пример комментария к @qubyte выше был прерван, так что здесь что-то, что легче читать...
Описанный выше метод @surjikal работает для коммитов веток, но он не работал для коммитов дерева, которые я пытался включить.
Режим архива также работает для коммитов. Например, fetch @a2fbf83
нпм:
npm install https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz
пряжа:
yarn add https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz
формат:
https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz
Вот коммит дерева, который требует /archive/
mode: yarn add https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz
для соответствующего коммита vuex
Ответ 5
Эта команда устанавливает username/package
пакета npm из определенного git commit:
npm install https://github.com/username/package#3d0a21cc
Здесь 3d0a21cc
- это первые 8 символов хеша коммита.
Ответ 6
Если вы делаете это с несколькими модулями и хотите иметь больше контроля над версиями, вы должны изучить свой собственный частный реестр npm.
Таким образом, вы можете публиковать свои модули в частном реестре npm и использовать записи package.json так же, как и для общедоступных модулей.
https://docs.npmjs.com/files/package.json#dependencies
Ответ 7
Я опишу здесь проблему, с которой я столкнулся при запуске npm install
- пакет не отображается в node_modules
.
Проблема заключалась в том, что значение name
в package.json
установленного пакета отличалось от имени импортируемого пакета (ключ в package.json
моего проекта).
Поэтому, если имя вашего установленного проекта - some-package
(значение name в его package.json
), то в package.json
вашего проекта напишите: "some-package": "owner/some-repo#tag"
.