Как автоматически перезапустить приложения Node.js с помощью nodemon
Введение
В Node.js вам необходимо перезапустить процесс, чтобы изменения вступили в силу. Это добавляет дополнительный шаг к вашему рабочему процессу. Вы можете исключить этот дополнительный шаг, используя nodemon
для автоматического перезапуска процесса.
nodemon
— это утилита интерфейса командной строки (CLI), разработанная @rem, которая обертывает ваше приложение Node, следит за файловой системой и автоматически перезапускает процесс.
В этой статье вы узнаете об установке, настройке и настройке nodemon
.
Предпосылки
Если вы хотите следовать этой статье, вам понадобятся:
- Node.js установлен локально, что можно сделать, следуя инструкциям по установке Node.js и созданию локальной среды разработки.
Это руководство было проверено с помощью Node.js v17.1.0, npm v8.1.2, nodemon
v2.0.15 и express
v4.17.1.
Шаг 1 — Установка нодмона
Во-первых, вам необходимо установить nodemon
на свой компьютер. Установите утилиту глобально или локально в вашем проекте с помощью npm
или yarn
:
Глобальная установка
Вы можете установить nodemon
глобально с помощью npm
:
- npm install nodemon --global
Или с пряжей
:
- yarn global add nodemon
Локальная установка
Вы также можете установить nodemon
локально. При выполнении локальной установки вы можете установить nodemon
как зависимость от разработчиков с помощью --save-dev
(или --dev
).
Установите nodemon
локально с помощью npm
:
- npm install nodemon --save-dev
Или с пряжей
:
- yarn add nodemon --dev
При локальной установке следует помнить, что вы не сможете напрямую использовать команду nodemon
:
- Outputcommand not found: nodemon
Вы можете выполнить локально установленный пакет:
- ./node_modules/nodemon/bin/nodemon.js [your node app]
Вы также можете использовать его в npx.
На этом процесс установки nodemon
завершается.
Шаг 2 — Настройка примера экспресс-проекта с помощью nodemon
Вы можете использовать nodemon
для запуска скрипта Node. Например, если у вас есть настройка сервера Express в файле server.js
, вы можете запустить nodemon
и наблюдать за такими изменениями:
- nodemon server.js
Вы можете передавать аргументы так же, как если бы вы запускали скрипт с Node:
- nodemon server.js 3006
Каждый раз, когда вы вносите изменения в файл с одним из отслеживаемых расширений по умолчанию (.js
, .mjs
, .json
, .coffee
или .litcoffee
) в текущем каталоге или подкаталоге процесс будет перезапущен.
Давайте напишем пример файла server.js
, который выводит сообщение: Приложение Dolphin прослушивает порт $ {port}!
.
const express = require('express')
const app = express()
const port = 3000
app.listen(port, ()=> console.log(`Dolphin app listening on port ${port}!`))
Запустите пример с nodemon
:
- nodemon server.js
Вывод терминала будет отображать:
Output[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
Dolphin app listening on port 3000!
Пока nodemon
все еще работает, давайте внесем изменения в файл server.js
. Измените вывод на другое сообщение: приложение Shark прослушивает порт $ {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
вашего проекта:
{
// ...
"main": "server.js",
// ...
}
Если файл main
не указан, nodemon
будет искать скрипт start
:
{
// ...
"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
Используя эти параметры, давайте создадим команду, удовлетворяющую следующему сценарию:
- просмотр каталога
сервера
- указание файлов с расширением
.ts
- игнорирование файлов с суффиксом
.test.ts
- выполнение файла (
server/server.ts
) с помощьюts-node
- ожидание перезапуска в течение трех секунд после изменения файла
- nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts
Вывод терминала будет отображать:
Output[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): server
[nodemon] watching extensions: ts
[nodemon] starting `ts-node server/server.ts`
Эта команда сочетает в себе --watch
, --ext
, --exec
, --ignore
и --delay
для выполнения условий нашего сценария.
Шаг 4 — Использование конфигураций
В предыдущем примере добавление переключателей конфигурации при запуске nodemon
может стать утомительным. Лучшим решением для проектов, требующих сложной конфигурации, является определение этих параметров в файле 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
ключ:
{
"name": "nodemon-example",
"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, где вы найдете упражнения и проекты по программированию.