// Tutorial //

Как автоматически перезапускать приложения Node.js с помощью nodemon

Published on November 23, 2020
Default avatar
By Alligator.io
Developer and author at DigitalOcean.
Русский
Как автоматически перезапускать приложения Node.js с помощью nodemon

Введение

В Node.js для вступления изменений в силу необходимо перезапустить процесс. Это добавляет в рабочий процесс дополнительный шаг, необходимый для внесения изменений. Вы можете устранить этот дополнительный шаг, используя nodemon для автоматического перезапуска процесса.

nodemon — это утилита командной строки, разработанная @rem. Она заключает в оболочку ваше приложение Node, наблюдает за файловой системой и автоматически перезапускает процесс.

Из этой статьи вы узнаете об установке и настройке nodemon.

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

Если вы захотите следовать за этой статьей, вам потребуется следующее:

Шаг 1 — Установка nodemon

Вначале вам нужно будет установить nodemon на вашем компьютере. Установите утилиту в проекте глобально или локально, используя npm или Yarn:

Глобальная установка

Вы можете установить nodemon глобально с помощью npm:

  1. npm install nodemon -g

Или с помощью Yarn:

  1. yarn global add nodemon

Локальная установка

Также вы можете установить nodemon локально с помощью npm. При локальной установке мы можем установить nodemon как зависимость dev с помощью --save-dev (или --dev):

  1. npm install nodemon --save-dev

Или с помощью Yarn:

  1. yarn add nodemon --dev

При локальной установке нужно знать, сможете ли вы использовать команду nodemon напрямую из командной строки:

  1. Output
    command not found: nodemon

Однако вы также можете использовать его как часть некоторых скриптов npm или с npx.

На этом процесс установки nodemon завершен. Далее мы будем использовать nodemon с нашими проектами.

Шаг 2 — Настройка образца проекта Example Express с помощью nodemon

Мы можем использовать nodemon для запуска скрипта Node. Например, если у нас имеется настройка сервера Express в файле server.js, мы можем запустить его и наблюдать за изменениями следующим образом:

  1. nodemon server.js

Вы можете передавать аргументы точно так же, как если бы запускали скрипт с помощью Node:

  1. nodemon server.js 3006

Процесс перезапускается каждый раз, когда вы вносите изменение в файл с одним из отслеживаемых по умолчанию расширений (.js, .mjs, .json, .coffee или .litcoffee) в текущем каталоге или подкаталоге.

Допустим мы записываем образец файла server.js, который выводит сообщение: Dolphin app listening on port ${port}!.

Мы можем запустить пример с помощью nodemon:

  1. nodemon server.js

Мы видим следующий вывод на терминале:

Output
[nodemon] 1.17.3 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node server.js` Dolphin app listening on port 3000!

Пока nodemon еще работает, внесем изменение в файл server.js для вывода сообщения: Shark app listening on port ${port}!.

Мы увидим следующий дополнительный вывод на терминале:

Output
[nodemon] restarting due to changes... [nodemon] starting `node server.js` Shark app listening on port 3000!

Вывод приложения Node.js на терминале отображается, как и ожидалось. Вы можете перезапустить процесс в любое время, набрав rs и нажав ENTER.

Также nodemon будет искать файл main, заданный в файле package.json вашего проекта:

package.json
{
  // ...
  "main": "server.js",
  // ...
}

Или скрипт start:

package.json
{
  // ...
  "scripts": {
    "start": "node server.js"
  },
  // ...
}

После внесения изменений в package.json вы сможете вызывать nodemon для запуска образца приложения в режиме наблюдения без его передачи в server.js.

Шаг 3 — Использование опций

Вы можете изменить параметры конфигурации, доступные nodemon.

Рассмотрим несколько основных опций:

  • --exec: используйте оператор --exec, чтобы задать двоичный код для выполнения файла. Например, в сочетании с двоичным кодом ts-node оператор --exec может быть полезен для наблюдения за изменениями и запуска файлов TypeScript.
  • --ext: задает различные расширения файлов для наблюдения. Для этого оператора требуется указать разделенный запятыми список расширений файлов (например, --ext js,ts).
  • --delay: по умолчанию nodemon ожидает одну секунду для перезапуска процесса после изменения файла, однако с помощью оператора --delay вы можете указать другое время задержки. Например, nodemon --delay 3.2 для задержки 3,2 секунды.
  • --watch: используйте оператор --watch, чтобы задать несколько каталогов или файлов для наблюдения. Добавляйте один оператор --watch для каждого каталога, за которым вы хотите наблюдать. По умолчанию вы наблюдаете за текущим каталогом и его подкаталогами, а с помощью --watch вы можете сузить область наблюдения до нескольких отдельных подкаталогов или файлов.
  • --ignore: используйте оператор --ignore, чтобы игнорировать определенные файлы, шаблоны файлов или каталоги.
  • --verbose: более развернутый вывод с информацией о том, какие файлы изменились, для активации перезапуска.

Вы можете просмотреть все доступные опции с помощью следующей команды:

  1. nodemon --help

Используя эти опции, создадим команду для соответствия следующему сценарию:

  • наблюдение за каталогом server
  • указание файлов с расширением .ts
  • игнорирование файлов с суффиксом .test.ts
  • выполнение файла (server/server.ts) с ts-node
  • ожидание перезапуска в течение трех секунд после изменения файла
  1. nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts

Эта команда комбинирует опции --watch, --ext, --exec, --ignore и --delay, чтобы выполнить условия для нашего сценария.

Шаг 4 — Использование конфигураций

В предыдущем примере добавление параметров конфигурации при выполнении nodemon может оказаться довольно затруднительным. Лучшее решение для проектов, требующих определенных конфигураций, — задать эти конфигурации в файле nodemon.json.

Например, здесь приведены те же конфигурации, что и в предыдущем примере командной строки, но они содержатся в файле nodemon.json:

nodemon.json
{
  "watch": ["server"],
  "ext": "ts",
  "ignore": ["*.test.ts"],
  "delay": "3",
  "execMap": {
    "ts": "ts-node"
  }
}

Обратите внимание, что execMap используется вместо оператора --exec. execMap позволяет задавать двоичный код, который следует использовать для определенных расширений файлов.

Если вы предпочитаете не добавлять в проект файл конфигурации nodemon.json, вы можете добавить эти конфигурации в файл package.json в ключ nodemonConfig:

package.json
{
  "name": "test-nodemon",
  "version": "1.0.0",
  "description": "",
  "nodemonConfig": {
    "watch": [
      "server"
    ],
    "ext": "ts",
    "ignore": [
      "*.test.ts"
    ],
    "delay": "3",
    "execMap": {
      "ts": "ts-node"
    }
  },
  // ...

Когда вы внесете изменения в nodemon.json или package.json, вы сможете запускать nodemon с помощью желаемого скрипта:

  1. nodemon server/server.ts

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

Заключение

В этой статье мы рассмотрели использование nodemon с приложениями Node.js. Этот инструмент поможет автоматизировать процесс остановки и запуска сервера Node для просмотра изменений.

Дополнительную информацию о доступных характеристиках и ошибках при диагностике и устранении неисправностей можно найти в официальной документации.

Если вы хотите узнать больше о Node.js, на странице темы Node.js вы найдете упражнения и проекты программирования.

If you’ve enjoyed this tutorial and our broader community, consider checking out our DigitalOcean products which can also help you achieve your development goals.

Learn more here


About the authors
Default avatar
Developer and author at DigitalOcean.

Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?
Leave a comment

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!