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


172

Для когось, хто йде з фонового режиму PHP, процес вбивства вузла і запускати його знову після кожної зміни коду здається дуже стомлюючим. Чи є прапор під час запуску скрипту з вузлом для автоматичного перезавантаження вузла, коли збережена зміна коду?

Відповіді:


94

назавжди модуль має концепцію декількох серверів node.js і може запускати, перезапускати, зупиняти та перераховувати поточні сервери. Він також може спостерігати за зміною файлів і за необхідності перезапустити вузол.

Встановіть його, якщо у вас його ще немає:

npm install forever -g

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

forever -w ./my-script.js

Крім того, ви можете дивитися каталог та ігнорувати шаблони:

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

+1 назавжди є досить універсальним як для розробки / тестування, так і для виробництва.
— smertrios

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

1
@BrianDiPalma Можливо, вам слід додати деякі ігнорування шаблонів, якщо під каталогом перегляду є файли, що змінюються, наприклад, журнали. Перевірте документи, щоб побачити, чи можна визначити затримку між перезавантаженнями.
— hyde

1
@hyde Не потрібна була затримка, це була потрібна опція -tабо killTreeпотрібна опція, я думаю, що вузол-вавіл був убитий, але не сервер Express, який він породив.
— Брайан Ді Пальма

2
Forever JS має помилку в Windows, яка не вбиває процес Node, коли сценарій припиняється. Доведеться вручну вбити Вузол процесу :( stackoverflow.com/questions/14556852 / ...
— pmont

157

Хороший варіант - Node-supervisor і Node.js Перезапуск файлів Зміна файлів - це добра стаття про те, як ним користуватися, як правило:

 npm install supervisor -g

а після переходу до кореня програми використовуйте наступне

 supervisor app.js

те саме, з будь-якої причини, як я раніше використовував нодемон без жодних питань.
— ZenMaster

1
Працював і для мене. Мені довелося змінити параметр перегляду за замовчуванням за замовчуванням, server.jsоскільки він постійно перезапускався, це було пов’язано з тим, що мій сервер будував клієнта під час завантаження і таким чином міняв файли. supervisor --watch server.js server.jsвирішили це.
— науковець

2
Контролер вузлів більше не підтримується.
— aleung

Працює як шарм !!
— JRichardsz

Моя улюблена, інтервали оновлення, щоб перевірити, чи файл модифікований, майже миттєвий!
— NiCk Newman

100

Ви повинні подивитися на щось на зразок нодемона .

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

Приклад:

nodemon ./server.js localhost 8080

або просто

nodemon server

Будь-яка ідея, чому для впровадження змін коду потрібен перезапуск? І чому інші сервери (наприклад Apache / PHP) не потребують перезавантаження?
— маверик

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

@Daerdemandt дякую, що поділився цим ... але я все одно не отримав, чому сервер (на будь-якій платформі) потрібно запускати та зупиняти? Це тому, що він підтримує кеш файлів (відповідей)? Я думав, що сервер буде завантажувати файли з диска під час запиту, обробляти його і потім надсилати відповідь. Я новачок у серверному програмуванні.
— maverick

Чи можете / ви повинні використовувати nodemon у виробничих умовах?
— JoeTidee

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

43

Для полегшення цього завдання доступні різні пакети NPM.

Для розвитку

  • нодемон : найпопулярніший і активно підтримується
  • назавжди : другий за популярністю
  • node-dev : жодних зобов’язань з травня 2019 року
  • керівник : - більше не підтримується

Для виробництва (з розширеним функціоналом, таким як кластеризація, віддалене розгортання тощо)

Порівняння між назавжди, ПМ2 і StrongLoop можна знайти на StrongLoop сайту.


3
@ 2019 nodemon здається єдиним із 4 варіантів розробки, які досі зберігаються.
— mvermand

1
@mvermand Так, останнім часом жодного з них не було випущено жодного з них, крім nodemon. Для виробництва PM2 все ще добре підтримується.
— Кей

16

Можна також спробувати нодемон

Щоб встановити Nodemon

npm install -g nodemon

Для використання Nodemon

Зазвичай ми запускаємо програму вузлів на зразок:

node server.js

Але тут ви повинні зробити так:

nodemon server.js

Хороший і простий відповідач !!
— lesimoes

1
nodemon має дратівливих помилок. Для мене це було даремно.
— kta

Чим ця відповідь відрізняється від відповіді на нодемон 2012 року ?
— Дан Даскалеску

9

вузол-дев

node-dev - це відмінна альтернатива як nodemon, так і супервізору для розробників, які хочуть отримувати бурхливі (або libnotify) сповіщення на робочому столі кожного разу, коли сервер перезапускається або коли у файлі виникають помилки або зміни .

Установка:

npm install -g node-dev

Використовуйте node-dev замість вузла:

node-dev app.js

Повідомлення про зміну файлу, щоб сервер запустився автоматично

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

консоль поставити

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


3

Я використовую runjs:

runjs example.js

Пакет називається просто run

npm install -g run

2
це не краще, просто інший варіант
— sp2danny

Ця відповідь була б набагато ціннішою, якби вона пояснила, чому ви використовуєте run, і як це порівняти з існуючими альтернативами. Просто скидання іншого варіанту лише сприяє парадоксу вибору. (На щастя run, не оновлювались з 2015 року, тому зараз це не так багато варіантів.)
— Dan Dascalescu,

0

Виконайте дії:

  1. npm install --save-dev nodemon

  2. Додайте наступні два рядки до розділу "скрипт" пакета 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 , але присутня з більшою кількістю "магії" навколо неї. Але суть відповіді - «використовувати нодемон». Скидання є дотичним. І вона була погано відформатована, але я бачу, що Девід це виправив, тому я скасую свою заяву.
— Дан Даскалеску
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.