В этом посте мы рассмотрим варианты
- разместить исходный код npm в GitHub
- разместить пакет npm (как публично, так и приватно) в Github Packages
- сборка, версия и публикация пакета npm через Действия GitHub
- Установите пакет npm, размещенный на GitHub, в свой проект
Мы будем использовать yarn
в качестве инструмента управления пакетами (в большинстве случаев). Вы можете заменить его на npm
и получить тот же результат.
Исходный код хоста NPM в GitHub
Сказать особо нечего, обратитесь к моему примеру репозитория https://github.com/windix/npm-tiny для примера NPM (полученного из Как сделать красивый, крошечный пакет npm и опубликовать его ).
Пакет Host NPM в пакетах Github
Пакет NPM, размещенный на GitHub, ограничен именем вашей учетной записи GitHub: @scope-name/package-name
. package-name
можно установить с помощью атрибута name
в package.json
.
Он поддерживает как общедоступные, так и частные пакеты (в зависимости от вашего репозитория GitHub, является общедоступным или частным).
Назначение публикации NPM (а не npmjs.com по умолчанию) управляется настройкой publishConfig
в package.json
:
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
}
Если вы хотите опубликовать со своего локального компьютера, выполните следующие действия:
- Вам понадобится токен личного доступа от GitHub, который будет использоваться в качестве пароля в командной строке. Его можно создать из Настройки ›Настройки разработчика› Личные токены доступа с правильными разрешениями (по крайней мере,
read:packages
,write:packages
иrepo
,delete:packages
необязательно). - Запустите
npm login --registry=https://npm.pkg.github.com
и следуйте подсказке. (Обратите внимание, чтоyarn login
не поддерживает указание реестра :() - Беги
yarn publish
(Вам нужно выполнить шаги 1 и 2 только один раз, и данные аутентификации будут сохранены в вашем ~/.npmrc
).
Примечания:
- Вы не можете удалить общедоступный пакет самостоятельно (аналогично, npmjs поддерживает удаление общедоступного пакета только в течение 72 часов).
- Закрытое репо недоступно для бесплатной организации. Нужна как минимум учетная запись уровня GitHub Team.
Сборка, версия и публикация пакета NPM с помощью действий GitHub
Поместите этот publish.yml
под .github/workflows/publish.yml
:
name: publish Node.js Package
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- run: yarn install
- run: yarn test
publish-gpr:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
registry-url: https://npm.pkg.github.com/
scope: '@windix'
- run: yarn install
- run: git config --global user.email "[email protected]" && git config --global user.name "$GITHUB_ACTOR"
- run: yarn version --minor
- run: git push --tags && git push
- run: yarn publish
env:
NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
Примечания:
- Не забудьте заменить
scope
своим именем учетной записи GitHub - Он срабатывает при новых фиксациях, помещенных в основную ветку (автоматическая отправка в задании
publish-gpr
не сработает!) - Два задания: build запустит тесты, если это пройдет, будет запущено задание publish-gpr
- Задание publish-gpr сначала увеличит дополнительный номер версии (например,
1.8.0
- ›1.9.0
), пометит git repo новой версиейv1.9.0
и вернет новую фиксацию в GitHub (это было сделаноyarn version
) . Затем, наконец, соберите и опубликуйте новый пакет npm в Github Packages (черезyarn publish
). - Обратите внимание, что аутентификация выполняется через
GITHUB_TOKEN
по умолчанию из среды GitHub Actions.
Установите пакет NPM, размещенный на GitHub, в свой проект
Требуется уровень проекта .npmrc
, поэтому менеджер пакетов знает, где скачать пакет:
@windix:registry=https://npm.pkg.github.com
Если ваш пакет NPM размещен в частном порядке, вам также необходимо сначала войти в систему через npm login --registry=https://npm.pkg.github.com
. См. Подробности в предыдущем разделе.
Теперь yarn add @windix/npm-tiny
установит мою последнюю версию npm-tiny
в ваш проект.
Устранение неполадок:
Если вы видите аналогичную ошибку:
error https://npm.pkg.github.com/download/@windix/npm-tiny/1.3.0/950b0ad707d12690c72d91db11c45dde44bbd8909845845033ab1ebabd3d1c3d: Integrity checked failed for "@windix/npm-tiny" (none of the specified algorithms are supported)
Вместо этого используйте yarn add @windix/npm-tiny --upgrade-checksums
, чтобы решить проблему.