Введение
В Node.js для вступления изменений в силу необходимо перезапустить процесс. Это добавляет в рабочий процесс дополнительный шаг, необходимый для внесения изменений. Вы можете устранить этот дополнительный шаг, используя nodemon
для автоматического перезапуска процесса.
nodemon
— это утилита командной строки, разработанная @rem. Она заключает в оболочку ваше приложение Node, наблюдает за файловой системой и автоматически перезапускает процесс.
Из этой статьи вы узнаете об установке и настройке nodemon
.
Предварительные требования
Если вы захотите следовать за этой статьей, вам потребуется следующее:
Шаг 1 — Установка nodemon
Вначале вам нужно будет установить nodemon
на вашем компьютере. Установите утилиту в проекте глобально или локально, используя npm или Yarn:
Глобальная установка
Вы можете установить nodemon
глобально с помощью npm
:
Или с помощью Yarn:
Локальная установка
Также вы можете установить nodemon
локально с помощью npm. При локальной установке мы можем установить nodemon
как зависимость dev с помощью --save-dev
(или --dev
):
- npm install nodemon --save-dev
Или с помощью Yarn:
При локальной установке нужно знать, сможете ли вы использовать команду nodemon
напрямую из командной строки:
Output
- command not found: nodemon
Однако вы также можете использовать его как часть некоторых скриптов npm или с npx.
На этом процесс установки nodemon
завершен. Далее мы будем использовать nodemon
с нашими проектами.
Шаг 2 — Настройка образца проекта Example Express с помощью nodemon
Мы можем использовать nodemon
для запуска скрипта Node. Например, если у нас имеется настройка сервера Express в файле server.js
, мы можем запустить его и наблюдать за изменениями следующим образом:
Вы можете передавать аргументы точно так же, как если бы запускали скрипт с помощью Node:
Процесс перезапускается каждый раз, когда вы вносите изменение в файл с одним из отслеживаемых по умолчанию расширений (.js
, .mjs
, .json
, .coffee
или .litcoffee
) в текущем каталоге или подкаталоге.
Допустим мы записываем образец файла server.js
, который выводит сообщение: Dolphin app listening on port ${port}!
.
Мы можем запустить пример с помощью nodemon
:
Мы видим следующий вывод на терминале:
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
: более развернутый вывод с информацией о том, какие файлы изменились, для активации перезапуска.
Вы можете просмотреть все доступные опции с помощью следующей команды:
Используя эти опции, создадим команду для соответствия следующему сценарию:
- наблюдение за каталогом
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
подбирает конфигурации и использует их. Это позволяет сохранять конфигурации, делиться ими и воспроизводить их, чтобы избежать ошибок при копировании и вставке или ошибок ввода в командной строке.
Заключение
В этой статье мы рассмотрели использование nodemon
с приложениями Node.js. Этот инструмент поможет автоматизировать процесс остановки и запуска сервера Node для просмотра изменений.
Дополнительную информацию о доступных характеристиках и ошибках при диагностике и устранении неисправностей можно найти в официальной документации.
Если вы хотите узнать больше о Node.js, на странице темы Node.js вы найдете упражнения и проекты программирования.