Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Публикация пакетов Node.js

Пакеты Node.js можно опубликовать в реестре в рамках рабочего процесса непрерывной интеграции (CI).

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Введение

В этом руководстве показано, как создать рабочий процесс, публикующий пакеты Node.js в GitHub Packages и реестры npm после прохождения тестов непрерывной интеграции (CI).

Предварительные требования

Рекомендуется иметь базовое представление о параметрах конфигурации рабочих процессов, а также о том, как создавать файл рабочего процесса. Дополнительные сведения см. в статье со сведениями о GitHub Actions.

Дополнительные сведения о создании рабочего процесса CI для проекта Node.js см. в разделе Использование Node.js с GitHub Actions.

Также могут быть полезны базовые знания в следующих областях:

Сведения о конфигурации пакета

Поля name и version в файле package.json создают уникальный идентификатор, который реестры используют для связывания пакета с реестром. Чтобы добавить сводку для страницы со списком пакетов, включите поле description в файл package.json . Дополнительные сведения см. в разделах Создание файла package.json и Создание модулей Node.js документации по npm.

Если локальный NPMRC-файл существует и имеет указанное значение registry, команда npm publish использует реестр, настроенный в NPMRC-файле. Действие setup-node можно использовать для создания локального NPMRC-файла в средстве выполнения, который настраивает реестр и область по умолчанию. Действие setup-node также принимает в качестве входных данных маркер проверки подлинности, используемый для доступа к частным реестрам или публикации пакетов узлов. Дополнительные сведения см. на веб-сайте setup-node.

Указать версию Node.js, установленную в средстве выполнения тестов, можно с помощью действия setup-node.

При добавлении шагов в рабочий процесс для настройки полей publishConfig в файле package.json не нужно указывать URL-адрес реестра с помощью действия setup-node, однако опубликовать пакет можно будет только в одном реестре. Дополнительные сведения см. в разделе publishConfig в документации npm.

Публикация пакетов в реестре npm

При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом created. Рабочий процесс публикует пакет в реестре npm при прохождении тестов CI.

Для выполнения аутентифицированных операций с реестром npm в рабочем процессе необходимо сохранить маркер проверки подлинности npm в виде секрета. Например, создайте секрет репозитория NPM_TOKEN. Дополнительные сведения см. в статье «Создание и использование зашифрованных секретов».

По умолчанию npm использует поле name файла package.json для определения имени опубликованного пакета. При публикации в глобальном пространстве имен необходимо включить только имя пакета. Например, пакет с именем npm-hello-world-test вы бы опубликовали в https://www.npmjs.com/package/npm-hello-world-test.

При публикации пакета с префиксом области включите область в имя файла package.json. Например, если префикс области npm — octocat, а имя пакета — hello-world, name в файле package.json — @octocat/hello-world. Если пакет npm использует префикс области и пакет является общедоступным, необходимо использовать параметр npm publish --access public. Это параметр, который npm требует, чтобы запретить кому-либо непреднамеренно опубликовать частный пакет.

В этом примере секрет NPM_TOKEN сохраняется в переменной среды NODE_AUTH_TOKEN. При создании NPMRC-файла действие setup-node ссылается на токен из переменной среды NODE_AUTH_TOKEN.

YAML
name: Publish Package to npmjs
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

В приведенном выше примере действие setup-node создает в средстве выполнения тестов NPMRC-файл со следующим содержимым:

//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
registry=https://registry.npmjs.org/
always-auth=true

Обратите внимание, что для правильной настройки учетных данных необходимо задать для registry-url значение https://registry.npmjs.org/ в setup-node.

Публикация пакетов в GitHub Packages

При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется каждый раз при возникновении события release с типом created. Если тесты CI проходят успешно, рабочий процесс публикует пакет в GitHub Packages.

Настройка целевого репозитория

Связывать пакет с GitHub Packages с помощью ключа repository не обязательно. Если ключ repository в файле package.json не указан, GitHub Packages публикует пакет в репозитории GitHub, указанном вами в поле name файла package.json. Например, пакет с именем @my-org/test публикуется в репозитории my-org/test GitHub. Если в ключе repository указан недопустимый url, пакет может быть опубликован, однако он не будет связан с источником репозитория, как предполагалось.

Если ключ repository указан в файле package.json, репозиторий в этом ключе используется в качестве целевого реестра npm для GitHub Packages. Например, публикация приведенного ниже файла package.json приводит к публикации пакета с именем my-amazing-package в репозиторииoctocat/my-other-repo GitHub. После публикации обновляется только источник репозитория, и пакет не наследует разрешения из целевого репозитория.

{
  "name": "@octocat/my-amazing-package",
  "repository": {
    "type": "git",
    "url": "https://github.com/octocat/my-other-repo.git"
  },

Проверка подлинности в целевом репозитории

Для выполнения аутентифицированных операций в реестре GitHub Packages в рабочем процессе можно использовать GITHUB_TOKEN. Секрет GITHUB_TOKEN устанавливается в качестве маркера доступа для репозитория при каждом запуске задания в рабочем процессе. Вам следует установить разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ на чтение в области contents и доступ на запись в области packages. Дополнительные сведения см. в разделе Проверка подлинности с помощью GITHUB_TOKEN.

Если вы хотите опубликовать пакет в другом репозитории, необходимо использовать personal access token, имеющий разрешение на запись в пакеты в целевом репозитории. Дополнительные сведения см. в разделах Создание personal access tokenи Зашифрованные секреты.

Пример рабочего процесса

В этом примере секрет GITHUB_TOKEN сохраняется в переменной среды NODE_AUTH_TOKEN. При создании NPMRC-файла действие setup-node ссылается на токен из переменной среды NODE_AUTH_TOKEN.

YAML
name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to GitHub Packages
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://npm.pkg.github.com'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Действие setup-node создает NPMRC-файл в средстве выполнения тестов. При использовании входных данных scope для действия setup-node NPMRC-файл включает префикс области. По умолчанию действие setup-node задает в качестве области в NPMRC-файле учетную запись, содержащую этот файл рабочего процесса.

//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://npm.pkg.github.com
always-auth=true

Публикация пакетов с помощью yarn

При использовании диспетчера пакетов Yarn можно устанавливать и публиковать пакеты с помощью Yarn.

YAML
name: Publish Package to npmjs
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: yarn
      - run: yarn publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}