Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Публикация пакетов 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.

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

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

Поля 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

Вы можете активировать рабочий процесс для публикации пакета каждый раз при публикации нового выпуска. Процесс в следующем примере выполняется при активации события выпуска типа published . Если тесты CI пройдены, процесс отправляет пакет в реестр npm. Дополнительные сведения см. в разделе Управление выпусками в репозитории.

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

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

При публикации пакета с префиксом области включите область в имя файла 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: [published]
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

Вы можете активировать рабочий процесс для публикации пакета каждый раз при публикации нового выпуска. Процесс в следующем примере выполняется при активации события выпуска типа published . Если тесты 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-package в репозиторииoctocat/my-other-repo GitHub. После публикации обновляется только источник репозитория, и пакет не наследует разрешения из целевого репозитория.

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

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

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

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

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

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

YAML
name: Publish package to GitHub Packages
on:
  release:
    types: [published]
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: [published]
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 }}