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


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.