nodemon - это инструмент, который помогает разрабатывать приложения на основе Node.js, автоматически перезапуская приложение node при обнаружении изменений файлов в каталоге.
nodemon не требует никаких дополнительных изменений в вашем коде или методе разработки. nodemon является заменой обертки для node
. Чтобы использовать nodemon
, замените слово node
в командной строке при выполнении вашего скрипта.
Установка
Либо через клонирование с помощью git, либо с использованием npm (рекомендуемый способ):
npm install -g nodemon # или с использованием yarn: yarn global add nodemon
И nodemon будет установлен глобально в вашу системную переменную PATH.
Вы также можете установить nodemon как зависимость для разработки:
npm install --save-dev nodemon # или с использованием yarn: yarn add nodemon -D
При локальной установке nodemon не будет доступен в вашей системной переменной PATH, и вы не сможете использовать его напрямую из командной строки. Вместо этого локальная установка nodemon может быть запущена, вызывая его из npm-скрипта (например, npm start
) или используя npx nodemon
.
Использование
nodemon оборачивает ваше приложение, поэтому вы можете передавать все аргументы, которые обычно передавали бы вашему приложению:
nodemon [ваше node приложение]
Для опций CLI используйте аргумент -h
(или --help
):
nodemon -h
Использование nodemon просто, если мое приложение принимает хост и порт в качестве аргументов, я бы запустил его так:
nodemon ./server.js localhost 8080
Любой вывод из этого скрипта будет с префиксом [nodemon]
, в противном случае весь вывод вашего приложения, включая ошибки, будет отображаться как обычно.
Вы также можете передать флаг inspect
в node через командную строку, как обычно:
nodemon --inspect ./server.js 80
Если у вас есть файл package.json
для вашего приложения, вы можете опустить основной скрипт, и nodemon прочитает package.json
для свойства main
и использует это значение в качестве приложения (ссылка).
nodemon также будет искать свойство scripts.start
в package.json
(начиная с nodemon 1.1.x).
Также ознакомьтесь с FAQ или issues для nodemon.
Автоматический перезапуск
nodemon изначально был написан для перезапуска зависающих процессов, таких как веб-серверы, но теперь поддерживает приложения, которые чисто завершаются. Если ваш скрипт завершается чисто, nodemon продолжит мониторить каталог (или каталоги) и перезапустит скрипт при любых изменениях.
Ручной перезапуск
Пока nodemon работает, если вам нужно вручную перезапустить ваше приложение, вместо остановки и перезапуска nodemon, вы можете ввести rs
с возвратом каретки, и nodemon перезапустит ваш процесс.
Конфигурационные файлы
nodemon поддерживает локальные и глобальные конфигурационные файлы. Обычно они называются nodemon.json
и могут находиться в текущем рабочем каталоге или в вашем домашнем каталоге. Альтернативный локальный конфигурационный файл можно указать с помощью опции --config <file>
.
Специфичность такова, что аргумент командной строки всегда будет переопределять настройки конфигурационного файла:
- аргументы командной строки
- локальная конфигурация
- глобальная конфигурация
Конфигурационный файл может принимать любые аргументы командной строки в виде ключевых значений JSON, например:
{
"verbose": true,
"ignore": ["*.test.js", "**/fixtures/**"],
"execMap": {
"rb": "ruby",
"pde": "processing --sketch={{pwd}} --run"
}
}
Приведенный выше файл nodemon.json
может быть моей глобальной конфигурацией, чтобы у меня была поддержка файлов ruby и processing, и я мог бы запустить nodemon demo.pde
, и nodemon автоматически знал бы, как запустить скрипт, даже если из коробки поддержка скриптов processing отсутствует.
Дополнительный пример опций можно увидеть в sample-nodemon.md
package.json
Если вы хотите хранить все конфигурации вашего пакета в одном месте, nodemon поддерживает использование package.json
для конфигурации. Укажите конфигурацию в том же формате, что и для конфигурационного файла, но под nodemonConfig
в файле package.json
, например, возьмите следующий package.json
:
{
"name": "nodemon",
"homepage": "http://nodemon.io",
"...": "... другие стандартные значения package.json",
"nodemonConfig": {
"ignore": ["**/test/**", "**/docs/**"],
"delay": 2500
}
}
Обратите внимание, что если вы укажете файл --config
или предоставите локальный nodemon.json
, любая конфигурация package.json
будет проигнорирована.
*Этот раздел нуждается в лучшей документации, но пока вы можете также посмотреть nodemon --help config
(также здесь)*.
Использование nodemon в качестве модуля
Пожалуйста, смотрите doc/requireable.md
Использование nodemon как дочернего процесса
Пожалуйста, смотрите doc/events.md
Запуск скриптов, не относящихся к node
nodemon также может использоваться для выполнения и мониторинга других программ. nodemon будет читать расширение файла выполняемого скрипта и мониторить это расширение вместо .js
, если нет nodemon.json
:
nodemon --exec "python -v" ./app.py
Теперь nodemon запустит app.py
с python в режиме verbose (обратите внимание, что если вы не передаете аргументы в исполняемую программу, кавычки не нужны), и будет искать новые или измененные файлы с расширением .py
.
Исполняемые файлы по умолчанию
Используя конфигурационный файл nodemon.json
, вы можете определить свои собственные исполняемые файлы по умолчанию, используя свойство execMap
. Это особенно полезно, если вы работаете с языком, который не поддерживается nodemon по умолчанию.
Чтобы добавить поддержку для nodemon, чтобы он знал о расширении .pl
(для Perl), файл nodemon.json
должен добавить:
{
"execMap": {
"pl": "perl"
}
}
Теперь, запустив следующее, nodemon будет знать, что нужно использовать perl
в качестве исполняемого файла:
nodemon script.pl
Рекомендуется использовать глобальный nodemon.json
для добавления своих собственных опций execMap
. Однако, если есть общий параметр по умолчанию, который отсутствует, это можно добавить в проект, чтобы nodemon поддерживал его по умолчанию, изменив default.js и отправив pull request.
Контроль завершения работы вашего скрипта
nodemon отправляет сигнал завершения вашему приложению, когда видит обновление файла. Если вам нужно выполнить очистку при завершении работы внутри вашего скрипта, вы можете захватить сигнал завершения и обработать его самостоятельно.
Следующий пример будет слушать сигнал SIGUSR2
(используемый nodemon для перезапуска), выполнит процесс очистки и затем завершит работу, чтобы nodemon продолжил управление:
// важно использовать `on`, а не `once`, так как nodemon может повторно отправить сигнал завершения
process.on('SIGUSR2', function () {
gracefulShutdown(function () {
process.kill(process.pid, 'SIGTERM');
});
});
Обратите внимание, что process.kill
вызывается только после завершения ваших задач по завершению работы. Спасибо Benjie Gillam за написание этой техники.
Запуск событий при изменении состояния nodemon
Если вы хотите уведомления в стиле growl, когда nodemon перезапускается, или чтобы выполнить действие при наступлении события, вы можете либо require
nodemon, либо добавить действия событий в ваш файл nodemon.json
.
Например, чтобы вызвать уведомление на Mac при перезапуске nodemon, nodemon.json
выглядит так:
{
"events": {
"restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'"
}
}
Полный список доступных событий приведен на wiki событий. Обратите внимание, что вы можете привязываться как к состояниям, так и к сообщениям.
Перенаправление вывода в другое место
nodemon({
script: ...,
stdout: false // важно: это указывает nodemon не выводить в консоль
}).on('readable', function() { // событие `readable` указывает, что данные готовы к чтению
this.stdout.pipe(fs.createWriteStream('output.txt'));
this.stderr.pipe(fs.createWriteStream('err.txt'));
});
Использование nodemon в вашем gulp workflow
Ознакомьтесь с плагином gulp-nodemon для интеграции nodemon с остальной частью вашего gulp workflow.
Использование nodemon в вашем Grunt workflow
Ознакомьтесь с плагином grunt-nodemon для интеграции nodemon с остальной частью вашего grunt workflow.