Автоматический перезапуск приложений Node.js с помощью nodemon
Development, Java | Комментировать запись
В Node.js нужно перезапускать процесс, чтобы обновления вступили в силу – а это дополнительный шаг в разработке. К счастью, его можно автоматизировать с помощью nodemon.
nodemon – это утилита интерфейса командной строки (CLI), разработанная @rem, которая отслеживает файловую систему приложения Node и автоматически перезапускает процесс, если есть такая необходимость.
В этом мануале вы научитесь устанавливать и настраивать nodemon.
Требования
Чтобы выполнить этот мануал, вам понадобится локальная установка Node.js. Чтобы получить такую, следуйте нашим инструкциям по установке Node.js и созданию локальной среды разработки:
- Установка Node.js в Ubuntu 20.04
- Установка Node.js в CentOS 8
- Установка Node.js в Debian 10
- Установка Node.js и настройка локальной среды разработки в macOS
Примечание: Больше мануалов по работе с Node.js вы найдете здесь.
1: Установка nodemon
Для начала нам нужно установить утилиту nodemon на свой компьютер. Установите ее глобально или локально с помощью npm или Yarn.
Читайте также: Добавление и удаление пакетов с помощью npm и Yarn
Глобальная установка nodemon
Чтобы установить nodemon глобально с помощью npm, введите:
npm install nodemon -g
Чтобы сделать это с помощью Yarn, введите:
yarn global add nodemon
Локальная установка nodemon
Вы можете установить nodemon локально (утилита будет доступна только в рамках вашего проекта, а не во всей системе). Утилиту nodemon можно установить как dev зависимость с помощью флага –save-dev (или –dev):
npm install nodemon --save-dev
Это можно сделать и с помощью Yarn:
yarn add nodemon --dev
Устанавливая nodemon локально, вы должны понимать, что не сможете использовать ее из командной строки.
command not found: nodemon
Однако вы сможете использовать утилиту как часть скриптов npm или запускать ее с помощью npx.
Читайте также: Использование скриптов npm в разработке
2: Создание простого проекта Express с помощью nodemon
Утилиту nodemon можно использовать для запуска скрипта Node. Например, если в файле server.js у вас есть конфигурация сервера Express, мы можем запустить его и проследить за изменениями с помощью команды:
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
И мы увидим следующий вывод в терминале:
[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}!
Мы получим дополнительный вывод:
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Shark app listening on port 3000!
Вывод приложения Node.js отображается должным образом. Вы можете перезапустить процесс в любое время, набрав rs и нажав Enter.
Также nodemon будет искать файл main, указанный в файле package.json вашего проекта:
{
// ...
"main": "server.js",
// ...
}
Или скрипт start:
{
// ...
"scripts": {
"start": "node server.js"
},
// ...
}
После внесения изменений в package.json вы можете вызвать nodemon, чтобы запустить пример приложения в режиме просмотра без необходимости передавать server.js.
3: Параметры nodemon
Вы можете изменить параметры конфигурации nodemon.
Давайте рассмотрим несколько основных опций:
- –exec: позволяет указать двоичный файл, с помощью которого будет выполняться файл. Например, в сочетании с двоичным файлом ts-node –exec может отслеживать изменения и запускать файлы TypeScript.
- –ext: указывает разные расширения отслеживаемых файлов. Эта опция принимает список расширений, разделенных запятыми (например, –ext js, ts).
- –delay: по умолчанию nodemon ждет одну секунду, чтобы перезапустить процесс при изменении файла, но с помощью опции –delay вы можете указать другую продолжительность ожидания. Например, nodemon –delay 3.2 установит задержку в 3,2 секунды.
- –watch: позволяет указать несколько отслеживаемых каталогов или файлов. Добавьте параметр –watch для каждого каталога, который вы хотите отслеживать. По умолчанию утилита отслеживает текущий каталог и его подкаталоги, а с помощью –watch вы можете сузить диапазон до определенных подкаталогов или файлов.
- –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 может оказаться довольно утомительным процессом. Лучшее решение для проектов, которым требуются определенные конфигурации, – указать эти конфигурации в файле nodemon.json.
Например, вот те же конфигурации, что и в предыдущей команде – только теперь они помещены в файл nodemon.json:
{
"watch": ["server"],
"ext": "ts",
"ignore": ["*.test.ts"],
"delay": "3",
"execMap": {
"ts": "ts-node"
}
}
Обратите внимание: вместо флага –exec мы используем здесь execMap. execMap позволяет указывать двоичные файлы, которые следует применять при определенных расширениях файлов.
Если вы не хотите добавлять конфигурационный файл nodemon.json в свой проект, вы можете добавить эти конфигурации в файл 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 с необходимым скриптом:
nodemon server/server.ts
nodemon подберет конфигурации из файла и использует их. Таким образом, ваши конфигурации можно сохранять, публиковать и повторять, чтобы избежать ошибок и необходимости вручную вводить опции (или постоянно копировать и вставлять их).
Заключение
Теперь вы знаете, как использовать nodemon с вашими приложениями Node.js. Этот инструмент помогает автоматизировать процесс остановки и запуска сервера Node.
За дополнительной информацией о доступных функциях и устранении ошибок обратитесь к официальной документации.
Tags: Express, Node.js, Yarn