Tutorial

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

Node.js

Введение

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

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

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

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

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

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

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

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

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

  • npm install nodemon -g

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

  • yarn global add nodemon

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

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

  • npm install nodemon --save-dev

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

  • yarn add nodemon --dev

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

Output
  • command not found: nodemon

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

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

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

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

  • nodemon server.js

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

  • nodemon server.js 3006

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

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

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

  • 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: более развернутый вывод с информацией о том, какие файлы изменились, для активации перезапуска.

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

  • nodemon --help

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

  • наблюдение за каталогом server
  • указание файлов с расширением .ts
  • игнорирование файлов с суффиксом .test.ts
  • выполнение файла (server/server.ts) с ts-node
  • ожидание перезапуска в течение трех секунд после изменения файла
  • 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 с помощью желаемого скрипта:

  • nodemon server/server.ts

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

Заключение

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

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

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

Creative Commons License