{"meta":{"title":"Создание и тестирование для Node.js","intro":"Узнайте, как создать рабочий процесс непрерывной интеграции (CI) для создания и тестирования проекта Node.js.","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/tutorials","title":"Учебники"},{"href":"/ru/actions/tutorials/build-and-test-code","title":"Сборка и тестирование кода"},{"href":"/ru/actions/tutorials/build-and-test-code/nodejs","title":"Node.js"}],"documentType":"article"},"body":"# Создание и тестирование для Node.js\n\nУзнайте, как создать рабочий процесс непрерывной интеграции (CI) для создания и тестирования проекта Node.js.\n\n## Введение\n\nВ этом руководстве показано, как получить рабочий процесс непрерывной интеграции (CI), который создает и тестирует код Node.js. Если тесты CI проходят правильно, может потребоваться развернуть код или опубликовать пакет.\n\n## Необходимые компоненты\n\nРекомендуется иметь базовое представление о Node.js, YAML, параметрах конфигурации рабочих процессов, а также о том, как создавать файл рабочего процесса. Дополнительные сведения см. в разделе:\n\n* [Написание рабочих процессов](/ru/actions/how-tos/write-workflows)\n* [Начало работы с Node.js](https://nodejs.org/learn/getting-started/introduction-to-nodejs)\n\n## Использование шаблона рабочего процесса Node.js\n\nЧтобы быстро приступить к работе, добавьте шаблон рабочего процесса в `.github/workflows` каталог репозитория.\n\nGitHub предоставляет шаблон рабочего процесса для Node.js, которые должны работать для большинства Node.js проектов. В последующих разделах этого руководства приведены примеры настройки этого шаблона рабочего процесса.\n\n1. На GitHubперейдите на главную страницу репозитория.\n\n2. Под именем репозитория щелкните **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg> Actions**.\n\n   ![Снимок экрана: вкладки для репозитория github/docs. Вкладка \"Действия\" выделена оранжевым контуром.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. Если в вашем репозитории уже используется рабочий процесс, нажмите кнопку **Создать рабочий процесс**.\n\n4. На странице \"Выбор рабочего процесса\" показан выбор рекомендуемых шаблонов рабочих процессов. Найдите \"Node.js\".\n\n5. Отфильтруйте выбор рабочих процессов, щелкнув **\"Непрерывная интеграция**\".\n\n6. В рабочем процессе \"Node.js\" нажмите кнопку **\"Настроить**\".\n\n7. Измените рабочий процесс по мере необходимости. Например, измените версии узла, которые вы хотите использовать.\n\n8. Щелкните **Зафиксировать изменения**.\n\n   Файл `node.js.yml` рабочего процесса добавляется в `.github/workflows` каталог вашего репозитория.\n\n## Указание версии Node.js\n\nСамый простой способ указать версию Node.js — использовать действие, предоставленное `setup-node`GitHub. Дополнительные сведения см. описании [`setup-node`](https://github.com/actions/setup-node/).\n\nДействие `setup-node` принимает версию Node.js в качестве входных данных и настраивает ее в средстве выполнения. Действие `setup-node` находит определенную версию Node.js из кэша инструментов в каждом средстве запуска и добавляет необходимые двоичные файлы в переменную `PATH`, которая сохраняется до конца задания.\n`setup-node` Использование действия — это рекомендуемый способ использования Node.js, GitHub Actions так как он обеспечивает согласованное поведение между различными средствами выполнения и различными версиями Node.js. При использовании локального средства выполнения необходимо установить Node.js и добавить его в `PATH`.\n\nШаблон рабочего процесса включает в себя стратегию матрицы, которая создает и тестирует код с помощью Node.js версий, перечисленных в `node-version`. Значение x в номере версии — это подстановочный знак, соответствующий последнему дополнительному и исправлению, доступному для версии. Каждая версия Node.js, указанная в массиве `node-version`, создает задание, которое выполняет одни и те же действия.\n\nКаждое задание может получить доступ к значению, определенному в массиве `node-version` матрицы, с помощью контекста `matrix`. Действие `setup-node` использует контекст в качестве входных данных `node-version`. Действие `setup-node` настраивает каждое задание с использованием разных версий Node.js перед созданием и тестированием кода. Дополнительные сведения о стратегиях матриц и контекстах см. в разделе \\[AUTOTITLE и [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrix)]\\(/actions/reference/workflows-and-actions/contexts).\n\n```yaml copy\nstrategy:\n  matrix:\n    node-version: ['18.x', '20.x']\n\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js ${{ matrix.node-version }}\n  uses: actions/setup-node@v7\n  with:\n    node-version: ${{ matrix.node-version }}\n```\n\nКроме того, можно создавать и тестировать код с использованием конкретных версий Node.js.\n\n```yaml copy\nstrategy:\n  matrix:\n    node-version: ['10.17.0', '17.9.0']\n```\n\nЛибо можно создавать и тестировать код с помощью одной версии Node.js.\n\n```yaml copy\nname: Node.js CI\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Use Node.js\n        uses: actions/setup-node@v7\n        with:\n          node-version: '20.x'\n      - run: npm ci\n      - run: npm run build --if-present\n      - run: npm test\n```\n\nЕсли вы не указываете версию Node.js, GitHub использует версию среды по умолчанию Node.js.\nДополнительные сведения см. в разделе [Средства выполнения тестов, размещенные в GitHub](/ru/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images).\n\n## Установка зависимостей\n\nGitHub-размещенные средства выполнения имеют npm и диспетчеры зависимостей Yarn. Вы можете использовать npm и Yarn для установки зависимостей в рабочем процессе перед созданием и тестированием кода. На Windows и GitHubLinux также установлены средства выполнения Grunt, Gulp и Bower.\n\nМожно также кэшировать зависимости, чтобы ускорить рабочий процесс. Дополнительные сведения см. в разделе [Справочник по кэшированию зависимостей](/ru/actions/reference/workflows-and-actions/dependency-caching).\n\n### Пример использования npm\n\nВ этом примере устанавливаются версии в `package-lock.json` файле или `npm-shrinkwrap.json` файле и не будут обновляться файлы блокировки. Выполнение `npm ci` обычно осуществляется быстрее, чем `npm install`. Дополнительные сведения см. в статье [`npm ci`](https://docs.npmjs.com/cli/ci.html) и [вводе `npm ci` более быстрых и надежных сборок.](https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable)\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v7\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: npm ci\n```\n\nС помощью `npm install` установки зависимостей, определенных в `package.json` файле. Дополнительные сведения см. в статье [`npm install`](https://docs.npmjs.com/cli/install).\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v7\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: npm install\n```\n\n### Пример использования Yarn\n\nВ этом примере устанавливаются зависимости, определенные в `yarn.lock` файле, и предотвращается обновление `yarn.lock` файла. Дополнительные сведения см. в статье [`yarn install`](https://yarnpkg.com/en/docs/cli/install).\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v7\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: yarn --frozen-lockfile\n```\n\nКроме того, можно установить зависимости, определенные в `package.json` файле.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v7\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: yarn\n```\n\n### Пример использования частного реестра и создания NPMRC-файла\n\nДействие можно использовать `setup-node` для создания локального `.npmrc` файла в средстве выполнения, который настраивает реестр и область по умолчанию. Действие `setup-node` также принимает в качестве входных данных маркер проверки подлинности, используемый для доступа к частным реестрам или публикации пакетов узлов. Дополнительные сведения см. в разделе [`setup-node`](https://github.com/actions/setup-node/).\n\nЧтобы пройти проверку подлинности в частном реестре, нужно сохранить маркер проверки подлинности npm в виде секрета. Например, создайте секрет репозитория `NPM_TOKEN`. Дополнительные сведения см. в разделе [Использование секретов в GitHub Actions](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\nВ приведенном ниже примере в `NPM_TOKEN` секрета хранится токен проверки подлинности npm. Действие `setup-node` настраивает `.npmrc` файл для чтения маркера проверки подлинности npm из переменной `NODE_AUTH_TOKEN` среды. При использовании `setup-node` действия для создания `.npmrc` файла необходимо задать `NODE_AUTH_TOKEN` переменную среды с секретом, содержащим маркер проверки подлинности npm.\n\nПеред установкой `setup-node` зависимостей используйте действие для создания `.npmrc` файла. Это действие имеет два входных параметра. Параметр `node-version` задает версию Node.js, а параметр `registry-url` задает реестр по умолчанию. Если в реестре пакетов используются области, необходимо использовать параметр `scope`. Дополнительные сведения см. в статье [`npm-scope`](https://docs.npmjs.com/misc/scope).\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v7\n  with:\n    always-auth: true\n    node-version: '20.x'\n    registry-url: https://registry.npmjs.org\n    scope: '@octocat'\n- name: Install dependencies\n  run: npm ci\n  env:\n    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\nВ приведенном выше примере создается `.npmrc` файл со следующим содержимым:\n\n```shell\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\n@octocat:registry=https://registry.npmjs.org/\nalways-auth=true\n```\n\n### Примеры кэширования зависимостей\n\nМожно кэшировать и восстанавливать зависимости с помощью [`setup-node`действия](https://github.com/actions/setup-node).\n\nВ следующем примере кэшируются зависимости для npm.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- uses: actions/setup-node@v7\n  with:\n    node-version: '20'\n    cache: 'npm'\n- run: npm install\n- run: npm test\n```\n\nВ следующем примере кэшируются зависимости для Yarn.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- uses: actions/setup-node@v7\n  with:\n    node-version: '20'\n    cache: 'yarn'\n- run: yarn\n- run: yarn test\n```\n\nВ следующем примере кэшируются зависимости для pnpm (версия 6.10 или более поздняя).\n\n```yaml copy\n# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.\n# Они предоставляются сторонним поставщиком, и на них распространяются\n# отдельные условия обслуживания, политика конфиденциальности и поддержка\n# документации.\n\n# NOTE: pnpm caching support requires pnpm version >= 6.10.0\n\nsteps:\n- uses: actions/checkout@v6\n- uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad\n  with:\n    version: 6.10.0\n- uses: actions/setup-node@v7\n  with:\n    node-version: '20'\n    cache: 'pnpm'\n- run: pnpm install\n- run: pnpm test\n```\n\nЕсли у вас есть особые требования или вам нужно управлять кэшированием более детально, можно использовать [действие `cache`](https://github.com/marketplace/actions/cache). Дополнительные сведения см. в разделе [Справочник по кэшированию зависимостей](/ru/actions/reference/workflows-and-actions/dependency-caching).\n\n## Создание и тестирование кода\n\nВы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде. Например, если выполнить `npm run build` шаги сборки, определенные в `package.json` файле и `npm test` запустить набор тестов, вы добавите эти команды в файл рабочего процесса.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v7\n  with:\n    node-version: '20.x'\n- run: npm install\n- run: npm run build --if-present\n- run: npm test\n```\n\n## Упаковка данных рабочего процесса в виде артефактов\n\nВы можете сохранить артефакты из шагов сборки и тестирования, чтобы просмотреть их после завершения задания. Например, может потребоваться сохранить файлы журналов, основные дампы, результаты теста или снимки экрана. Дополнительные сведения см. в разделе [Хранение и предоставление общего доступа к данным с артефактами рабочего процесса](/ru/actions/tutorials/store-and-share-data).\n\n## Публикация в реестрах пакетов\n\nВы можете настроить рабочий процесс для публикации пакета Node.js в реестре пакетов после прохождения тестов CI. Дополнительные сведения о публикации в npm и GitHub Packagesсм. в разделе [Публикация пакетов Node.js](/ru/actions/tutorials/publish-packages/publish-nodejs-packages)."}