В этом посте мы рассмотрим варианты

  • разместить исходный код 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/"
  }

Если вы хотите опубликовать со своего локального компьютера, выполните следующие действия:

  1. Вам понадобится токен личного доступа от GitHub, который будет использоваться в качестве пароля в командной строке. Его можно создать из Настройки ›Настройки разработчика› Личные токены доступа с правильными разрешениями (по крайней мере, read:packages, write:packages и repo, delete:packages необязательно).
  2. Запустите npm login --registry=https://npm.pkg.github.com и следуйте подсказке. (Обратите внимание, что yarn login не поддерживает указание реестра :()
  3. Беги yarn publish

(Вам нужно выполнить шаги 1 и 2 только один раз, и данные аутентификации будут сохранены в вашем ~/.npmrc).

Примечания:

  1. Вы не можете удалить общедоступный пакет самостоятельно (аналогично, npmjs поддерживает удаление общедоступного пакета только в течение 72 часов).
  2. Закрытое репо недоступно для бесплатной организации. Нужна как минимум учетная запись уровня 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}}

Примечания:

  1. Не забудьте заменить scope своим именем учетной записи GitHub
  2. Он срабатывает при новых фиксациях, помещенных в основную ветку (автоматическая отправка в задании publish-gpr не сработает!)
  3. Два задания: build запустит тесты, если это пройдет, будет запущено задание publish-gpr
  4. Задание publish-gpr сначала увеличит дополнительный номер версии (например, 1.8.0 - ›1.9.0), пометит git repo новой версией v1.9.0 и вернет новую фиксацию в GitHub (это было сделано yarn version) . Затем, наконец, соберите и опубликуйте новый пакет npm в Github Packages (через yarn publish).
  5. Обратите внимание, что аутентификация выполняется через 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, чтобы решить проблему.