Перезапустите узел после изменения файла


172

Для тех, кто работает с PHP, процесс уничтожения узла и его повторного запуска после каждого изменения кода кажется очень утомительным. Есть ли флаг при запуске скрипта с узлом для автоматического перезапуска узла при сохранении изменения кода?

Ответы:


94

Модуль forever имеет концепцию нескольких серверов node.js и может запускать, перезапускать, останавливать и выводить список работающих серверов. Он также может следить за изменением файлов и при необходимости перезапускать узел.

Установите его, если у вас его еще нет:

npm install forever -g

После установки вызовите foreverкоманду: используйте -wфлаг, чтобы посмотреть файл на наличие изменений:

forever -w ./my-script.js

Кроме того, вы можете смотреть каталог и игнорировать шаблоны:

forever --watch --watchDirectory ./path/to/dir --watchIgnore *.log ./start/file

+1 навсегда довольно универсален как для разработки / тестирования, так и для производства.
Смертриос

1
Я пытался использовать forever, чтобы перезапустить мой сервер ES2015 Expess.js / Webpack с помощью этой команды, forever -c babel-node -w --watchDirectory ./server ./server/index.js но, к сожалению, кажется, что он посылает навсегда в штопор, и он слишком часто перезагружает сервер, что приводит к ошибкам уже используемого порта ... добавить паузу после перезагрузки?
Брайан Ди Пальма

1
@BrianDiPalma Возможно, вам следует добавить несколько шаблонов игнорирования, если в каталоге наблюдения есть какие-либо изменяющиеся файлы, такие как журналы. Проверьте документы, чтобы увидеть, если вы можете определить задержку между перезапусками.
Хайд

1
@hyde Это была не задержка, которая требовалась, это была опция -tили, killTreeкоторая требовалась, я думаю, что babel-узел был убит, но не сервер Express, который он породил.
Брайан Ди Пальма

2
В Forever JS есть ошибка в Windows, которая не завершает процесс Node при завершении сценария.
Приходится

157

Хорошим вариантом является Node-supervisor, а Node.js Restart on File Change - хорошая статья о том, как его использовать, обычно:

 npm install supervisor -g

и после миграции в корень вашего приложения используйте следующее

 supervisor app.js

то же самое здесь, по любой причине, поскольку я использовал nodemon прежде без каких-либо проблем.
ZenMaster

1
У меня тоже сработало. Мне пришлось переопределить параметр подстановочного знака по умолчанию, server.jsпотому что он постоянно перезапускался, это было связано с тем, что мой сервер собирал клиента при загрузке и, таким образом, изменял файлы. supervisor --watch server.js server.jsрешил это.
scipilot

2
Узел-супервизор больше не поддерживается.
aleung

Работает как шарм!
JRichardsz

Мой любимый, интервалы обновления, чтобы проверить, изменен ли файл, почти мгновенны!
NiCk Newman

100

Вы должны посмотреть на что-то вроде nodemon .

Nodemon будет следить за файлами в каталоге, в котором был запущен nodemon, и если они изменятся, он автоматически перезапустит приложение вашего узла.

Пример:

nodemon ./server.js localhost 8080

или просто

nodemon server

Любая идея, почему Node требует перезагрузки для реализации изменений кода? И почему другие серверы (например, Apache / PHP) не требуют перезапуска?
Индивидуалист

2
@ dk49, потому что PHP-сценарии в этом случае запускаются для каждого входящего запроса и останавливаются после завершения генерации страницы.
Daerdemandt

@Daerdemandt спасибо за то, что поделились этим .. но я до сих пор не понял, почему сервер (на любой платформе) должен запускаться и останавливаться? Это потому, что он поддерживает кеш файлов (ответов)? Я думал, что сервер будет загружать файлы с диска во время запроса, обрабатывать его и затем отправлять ответ. Я новичок в программировании на стороне сервера.
индивидуалист

Можете ли вы / должны использовать nodemon в производственной среде?
JoeTidee

1
Не уверен, как nodemon все еще работает сегодня (как это было в 2012 году), но по соображениям безопасности я не уверен, что я бы хотел, чтобы мой сервер перезапускался на prod при изменении файла. Нечто подобное pm2 может быть более подходящим для производственной среды.
Menztrual

43

Для упрощения этой задачи доступны различные пакеты NPM.

Для разработки

  • nodemon : самый популярный и активно поддерживаемый
  • навсегда : второй по популярности
  • node-dev : нет коммитов с мая 2019
  • руководитель : - больше не поддерживается

Для производства (с расширенными функциями, такими как кластеризация, удаленное развертывание и т. Д.)

Сравнение между Forever, pm2 и StrongLoop можно найти на веб -сайте StrongLoop .


3
@ 2019 кажется, что nodemon - единственный из четырех вариантов разработки, который все еще поддерживается.
mvermand

1
@mvermand Да, новые выпуски недавно не выпускались ни для одного из них, кроме nodemon. Что касается производства, PM2 по-прежнему в хорошем состоянии.
Кей

16

Вы также можете попробовать nodemon

Установить Nodemon

npm install -g nodemon

Использовать Nodemon

Обычно мы запускаем программу узла, как:

node server.js

Но здесь вы должны сделать, как:

nodemon server.js

Хороший и простой ответ!
Lesimoes

1
В nodemon есть досадные ошибки. Это было время для меня.
KTA

Чем этот ответ отличается от ответа 2012 года на nodemon ?
Дан Даскалеску

9

Узел-DEV

node-dev - отличная альтернатива как nodemon, так и супервизору для разработчиков, которым нравится получать уведомления рычания (или libnotify) на своем рабочем столе при каждом перезапуске сервера или при возникновении ошибки или изменения в файле.

Монтаж:

npm install -g node-dev

Используйте node-dev вместо node:

node-dev app.js

Уведомление об изменении файла для автоматического запуска сервера

введите описание изображения здесь

утешить положить

введите описание изображения здесь


3

Я использую runjsкак:

runjs example.js

Пакет называется просто run

npm install -g run

2
это не лучше, просто еще один вариант
sp2danny

Этот ответ был бы гораздо более ценным, если бы он объяснил, почему вы используете run, и как он по сравнению с существующими альтернативами. Простой сброс другого варианта только способствует парадоксу выбора. (К счастью run, не обновлялся с 2015 года, так что теперь это не
самый лучший

0

Следуйте шагам:

  1. npm install --save-dev nodemon

  2. Добавьте следующие две строки в раздел «script» файла package.json:

"start": "node ./bin/www",
"devstart": "nodemon ./bin/www"

как показано ниже:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./bin/www",
    "devstart": "nodemon ./bin/www"
}
  1. npm run devstart

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/skeleton_website


Ну, это по сути тот же ответ, что и в 2012 году , но с большим количеством «волшебства». Но суть ответа - «использовать nodemon». Сброс тангенциальный. И это было плохо отформатировано, но я вижу, что Дэвид исправил это, поэтому я отменил свое отрицательное голосование.
Дан Даскалеску
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.