Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

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

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
26 апреля 2022 г.
771
6 минут чтения
Средний рейтинг статьи: 5

New Documentation

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

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

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

Требования к системе

Понадобится локальная машина или виртуальный сервер VPS/VDS, подходящий по техническим характеристикам. Они включают минимум процессор с тактовой частотой 1 ГГц, ОЗУ от 512 Мбайт, свободное пространство на накопителе от 15 Мбайт. Также нужно произвести установку Node.js по инструкции из официальной документации, создать среду разработчика (а это уже тема для отдельной статьи).

Шаг 1. Инсталляция утилиты nodemon

Первым этапом всегда идет установки утилиты на рабочем или виртуальном компьютере. Есть два варианта – глобальная и локальная инсталляция. Выполнить процедуру можно через npm или yarn.

Установка в глобальном режиме

Выполним команду через npm:

npm install nodemon –g

Или yarn:

yarn global add nodemon

Установка в локальном режиме

При локальной инсталляции допустимо задавать зависимость dev:

npm install nodemon --save-dev

При помощи yarn команда будет выглядеть так:

yarn add nodemon –dev

Процедура установки завершена, можно приступать к дальнейшей работе.

Шаг 2. Настройка проекта Node.js через nodemon

С практической стороны интересна возможность старта скриптов Node с nodemon. Возьмем пример: в наличии есть файл для задания параметров, сохраненный под именем serv.js. Введем команду и понаблюдаем за происходящими корректировками:

nodemon serv.js

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

nodemon serv.js 3006

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

Dolphin app listening on port ${port}. 

Теперь введем команду:

nodemon serv.js

На экран будет выведено сообщение:

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

Пока утилита функционирует, сделаем корректировки в файле serv.js. Например, чтобы скрипт вывел сообщение Shark app listening on port ${port}. Информация на экране обновится, мы увидим:

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

Как и планировалось, идет вывод о произведенных изменениях. Рестарт процесса возможен по желанию пользователя – достаточно набрать команду rs и кликнуть Enter.

Шаг 3. Применение опций

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

  • --exec – задает двоичный код, считываемый при выполнении файлов. Так, в случае указания ts-node утилита будет наблюдать за запуском TypeScript, происходящими в нем изменениями.
  • --ext – опция указывает утилите nodemon, какие расширения будут подпадать под функцию наблюдения. Вносить перечень следует через запятую. Например, js, ts.
  • --delay – устанавливает время до перезапуска процесса после фиксации изменений в файле. По умолчанию это значение равно одной секунде. Новое требуется указывать в цифровом виде, например 3.1.
  • --watch – позволяет задать наблюдение за несколькими файлами или директориями. Опцию используют отдельно для каждого объекта. По умолчанию утилита мониторит текущую папку и вложенные в нее каталоги. При помощи watch можно как расширить сферу работы nodemon, так и сузить сектор наблюдения, отключив часть вложенных папок или файлов, расположенных в них.
  • --ignore – аналогично предыдущей опции, предназначена для принудительного отключения наблюдения за указанными файлами, папками или шаблонами.
  • --verbose – дает подробное информирование об измененных файлах, процедуре рестарта процесса.

Полный перечень опций доступен по команде:

nodemon --help

Приведем пример их комбинированного использования. Предположим, что необходимо включить мониторинг файлов с расширением .ts в каталоге server, при этом пропускать файлы с суффиксом .test.ts и ждать рестарта в течение 3-х секунд после фиксации факта сохранения изменений. А также при запуске применять двоичный код ts-node.

Команда будет выглядеть так:

nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts

Здесь одновременно используются опции --watch, --ext, --exec, --ignore и --delay.

Шаг 4. Применение конфигураций

Если думать о том, как упростить работу с Node.js, стоит настроить и параметры конфигурации. Например, задать перечень нужных опций в nodemon.json. Тогда появится возможность пакетного старта утилиты. Пример такого файла:

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

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

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

{
  "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 server/server.ts

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

Заключение

Мы рассмотрели краткую информацию по инсталляции и настройке утилиты nodemon для контроля обновлений файлов в среде Node. Это решение популярно благодаря автоматизации рутинных задач остановки-запуска сервера. При отсутствии под рукой локальной машины для экспериментов, стоит взять в аренду мощности у провайдера Timeweb Cloud.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону