Skip to main content

Enterprise Server 3.20 в настоящее время доступен в качестве кандидата на выпуск.

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

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

Введение

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

Необходимые компоненты

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

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

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

  •         [AUTOTITLE](/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)
    
  •         [AUTOTITLE](/actions/learn-github-actions/variables)
    
  •         [AUTOTITLE](/actions/security-guides/using-secrets-in-github-actions)
    
  •         [AUTOTITLE](/actions/security-guides/automatic-token-authentication)
    

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

          `name` Поля `version` в `package.json` файле создают уникальный идентификатор, который реестры используют для связывания пакета с реестром. Вы можете добавить сводку для страницы описания пакетов, включив `description` поле в `package.json` файл. Дополнительные сведения см. в разделе ["Создание файла](https://docs.npmjs.com/creating-a-package-json-file) package.json" и ["Создание модулей](https://docs.npmjs.com/creating-node-js-modules) 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. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.

По умолчанию 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. setup-node Когда действие создает .npmrc файл, он ссылается на маркер из переменной NODE_AUTH_TOKEN среды.

YAML
name: Publish Package to npmjs
on:
  release:
    types: [published]
jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v5
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v4
        with:
          node-version: '20.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. Если указанный url в ключе repository недопустимый, пакет может быть опубликован, однако он не будет связан с источником репозитория, как это нужно.

Если в файле указан ключ, репозиторий 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 разрешения. Дополнительные сведения см. в разделе Использование GITHUB_TOKEN для проверки подлинности в рабочих процессах.

Если вы хотите опубликовать пакет в другом репозитории, необходимо использовать personal access token (classic) с разрешением на запись в пакеты в целевом репозитории. Дополнительные сведения см. в разделе [AUTOTITLE и Управление личными маркерами доступа](/actions/security-guides/using-secrets-in-github-actions).

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

В этом примере секрет GITHUB_TOKEN сохраняется в переменной среды NODE_AUTH_TOKEN. setup-node Когда действие создает .npmrc файл, он ссылается на маркер из переменной 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@v5
      # Setup .npmrc file to publish to GitHub Packages
      - uses: actions/setup-node@v4
        with:
          node-version: '20.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@v5
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v4
        with:
          node-version: '20.x'
          registry-url: 'https://registry.npmjs.org'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: yarn
      - run: yarn npm publish // for Yarn version 1, use `yarn publish` instead
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

Чтобы пройти проверку подлинности в реестре во время публикации, убедитесь, что маркер проверки подлинности также определен в yarnrc.yml файле. Дополнительные сведения см . в статье "Параметры " в документации Yarn.