{"meta":{"title":"Публикация пакетов Node.js","intro":"В этом руководстве вы узнаете, как публиковать пакеты Node.js в реестр в рамках рабочего процесса непрерывной интеграции (CI).","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/tutorials","title":"Учебники"},{"href":"/ru/actions/tutorials/publish-packages","title":"Публикация пакетов"},{"href":"/ru/actions/tutorials/publish-packages/publish-nodejs-packages","title":"Публикация пакетов Node.js"}],"documentType":"article"},"body":"# Публикация пакетов Node.js\n\nВ этом руководстве вы узнаете, как публиковать пакеты Node.js в реестр в рамках рабочего процесса непрерывной интеграции (CI).\n\n## Введение\n\nВ этом руководстве показано, как создать рабочий процесс, публикующий пакеты Node.js в GitHub Packages и реестры npm после прохождения тестов непрерывной интеграции (CI).\n\n## Необходимые компоненты\n\nРекомендуется иметь базовое представление о параметрах конфигурации рабочих процессов, а также о том, как создавать файл рабочего процесса. Дополнительные сведения см. в разделе [Написание рабочих процессов](/ru/actions/learn-github-actions).\n\nДополнительные сведения о создании рабочего процесса CI для проекта Node.js см. в разделе [Создание и тестирование для Node.js](/ru/actions/automating-builds-and-tests/building-and-testing-nodejs).\n\nТакже могут быть полезны базовые знания в следующих областях:\n\n* [Работа с реестром npm](/ru/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)\n* [Хранение сведений в переменных](/ru/actions/learn-github-actions/variables)\n* [Использование секретов в GitHub Actions](/ru/actions/security-guides/using-secrets-in-github-actions)\n* [Использование GITHUB\\_TOKEN для проверки подлинности в рабочих процессах](/ru/actions/security-guides/automatic-token-authentication)\n\n## Сведения о конфигурации пакета\n\n```\n          `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.\n```\n\nЕсли локальный `.npmrc``registry` файл существует и имеет указанное значение, команда использует реестр, `npm publish` настроенный в `.npmrc` файле. Действие можно использовать `setup-node` для создания локального `.npmrc` файла в средстве выполнения, который настраивает реестр и область по умолчанию. Действие `setup-node` также принимает в качестве входных данных маркер проверки подлинности, используемый для доступа к частным реестрам или публикации пакетов узлов. Дополнительные сведения см. в разделе [`setup-node`](https://github.com/actions/setup-node/).\n\nУказать версию Node.js, установленную в средстве выполнения тестов, можно с помощью действия `setup-node`.\n\nЕсли вы добавите шаги в рабочий процесс для настройки `publishConfig` полей в `package.json` файле, вам не нужно указывать URL-адрес реестра с помощью `setup-node` действия, но вы будете ограничены публикацией пакета в одном реестре. Дополнительные сведения см [. в статье publishConfig](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#publishconfig) в документации по npm.\n\n## Публикация пакетов в реестре npm\n\nРабочий процесс можно активировать для публикации пакета каждый раз при публикации нового выпуска. Процесс в следующем примере выполняется при активации события выпуска типа `published` . Если тесты CI проходят, процесс отправляет пакет в реестр npm. Дополнительные сведения см. в разделе [Управление выпусками в репозитории](/ru/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release).\n\nДля выполнения аутентифицированных операций с реестром npm в рабочем процессе необходимо сохранить маркер проверки подлинности npm в виде секрета. Например, создайте секрет репозитория `NPM_TOKEN`. Дополнительные сведения см. в разделе [Использование секретов в GitHub Actions](/ru/actions/security-guides/using-secrets-in-github-actions).\n\nПо умолчанию npm использует `name` поле `package.json` файла для определения имени опубликованного пакета. При публикации в глобальном пространстве имен необходимо включить только имя пакета. Например, пакет с именем `my-package` вы бы опубликовали в `https://www.npmjs.com/package/my-package`.\n\nЕсли вы публикуете пакет, содержащий префикс области, добавьте область в имя `package.json` файла. Например, если префикс области npm имеет значение \"octocat\", а имя пакета — hello-world, `name` в файле `package.json` должно быть `@octocat/hello-world`указано значение . Если пакет npm использует префикс области и пакет является общедоступным, необходимо использовать параметр `npm publish --access public`. Это параметр, который npm требует, чтобы запретить кому-либо непреднамеренно опубликовать частный пакет.\n\nЕсли вы хотите опубликовать пакет с прованом, добавьте `--provenance` флаг с помощью `npm publish` команды. Это позволяет публично и проверяемо определить, где и как был создан пакет, что повышает безопасность цепочки поставок для людей, которые потребляют ваш пакет. Дополнительные сведения см. в разделе [\"Создание инструкций](https://docs.npmjs.com/generating-provenance-statements) прованса\" в документации npm.\n\nВ этом примере секрет `NPM_TOKEN` сохраняется в переменной среды `NODE_AUTH_TOKEN`.\n`setup-node` Когда действие создает `.npmrc` файл, он ссылается на маркер из переменной `NODE_AUTH_TOKEN` среды.\n\n```yaml copy\nname: Publish Package to npmjs\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      id-token: write\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to npm\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20.x'\n          registry-url: 'https://registry.npmjs.org'\n      - run: npm ci\n      - run: npm publish --provenance --access public\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\nВ приведенном выше `setup-node` примере действие создает `.npmrc` файл в средстве выполнения со следующим содержимым:\n\n```shell\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nregistry=https://registry.npmjs.org/\nalways-auth=true\n```\n\nОбратите внимание, что для правильной настройки учетных данных необходимо задать для `registry-url` значение `https://registry.npmjs.org/` в `setup-node`.\n\n## Публикация пакетов в GitHub Packages\n\nРабочий процесс можно активировать для публикации пакета каждый раз при публикации нового выпуска. Процесс в следующем примере выполняется при активации события выпуска типа `published` . Если тесты CI проходят, процесс отправляет пакет в GitHub Packages. Дополнительные сведения см. в разделе [Управление выпусками в репозитории](/ru/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release).\n\n### Настройка целевого репозитория\n\nСвязывать пакет с GitHub Packages с помощью ключа `repository` не обязательно. Если вы решили не указать `repository` ключ в `package.json` файле, то ваш пакет не будет связан с репозиторием при публикации, но вы можете подключить пакет к репозиторию позже.\n\nЕсли в файле указан ключ, репозиторий `repository` в `package.json` этом разделе используется в качестве целевого реестра npm для GitHub Packages. Например, публикация приведенных ниже `package.json` результатов в пакете с именем `my-package` , опубликованном в `octocat/my-other-repo` репозитории GitHub.\n\n```json\n{\n  \"name\": \"@octocat/my-package\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/octocat/my-other-repo.git\"\n  },\n}\n```\n\n### Проверка подлинности в целевом репозитории\n\nДля выполнения аутентифицированных операций в реестре GitHub Packages в рабочем процессе можно использовать `GITHUB_TOKEN`. Секрет `GITHUB_TOKEN` устанавливается в качестве маркера доступа для репозитория при каждом запуске задания в рабочем процессе. Необходимо задать разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ для чтения для `contents` разрешения и доступа на запись для `packages` разрешения. Дополнительные сведения см. в разделе [Использование GITHUB\\_TOKEN для проверки подлинности в рабочих процессах](/ru/actions/security-guides/automatic-token-authentication).\n\nЕсли вы хотите опубликовать пакет в другом репозитории, необходимо использовать personal access token (classic) с разрешением на запись в пакеты в целевом репозитории. Дополнительные сведения см. в разделе \\[AUTOTITLE и [Управление личными маркерами доступа](/ru/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)]\\(/actions/security-guides/using-secrets-in-github-actions).\n\n### Пример рабочего процесса\n\nВ этом примере секрет `GITHUB_TOKEN` сохраняется в переменной среды `NODE_AUTH_TOKEN`.\n`setup-node` Когда действие создает `.npmrc` файл, он ссылается на маркер из переменной `NODE_AUTH_TOKEN` среды.\n\n```yaml copy\nname: Publish package to GitHub Packages\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to GitHub Packages\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20.x'\n          registry-url: 'https://npm.pkg.github.com'\n          # Defaults to the user or organization that owns the workflow file\n          scope: '@octocat'\n      - run: npm ci\n      - run: npm publish\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\nДействие `setup-node` создает `.npmrc` файл в средстве выполнения. При использовании входных `scope` данных для `setup-node` действия `.npmrc` файл включает префикс области. По умолчанию `setup-node` действие задает область в `.npmrc` файле учетной записи, содержащей этот файл рабочего процесса.\n\n```shell\n//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n@octocat:registry=https://npm.pkg.github.com\nalways-auth=true\n```\n\n## Публикация пакетов с помощью Yarn\n\nПри использовании диспетчера пакетов Yarn можно устанавливать и публиковать пакеты с помощью Yarn.\n\n```yaml copy\nname: Publish Package to npmjs\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to npm\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20.x'\n          registry-url: 'https://registry.npmjs.org'\n          # Defaults to the user or organization that owns the workflow file\n          scope: '@octocat'\n      - run: yarn\n      - run: yarn npm publish // for Yarn version 1, use `yarn publish` instead\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\nЧтобы пройти проверку подлинности в реестре во время публикации, убедитесь, что маркер проверки подлинности также определен в `yarnrc.yml` файле. Дополнительные сведения см [. в статье \"Параметры](https://yarnpkg.com/configuration/yarnrc#npmAuthToken) \" в документации Yarn."}