Как я могу редактировать файлы на моем сервере без перезапуска nodejs, когда я хочу видеть изменения?
Я пытаюсь настроить свой собственный сервер nodejs, но у меня возникли проблемы. Я не могу понять, как увидеть изменения в моем приложении без его перезапуска. Есть ли способ редактировать приложение и видеть изменения в прямом эфире с узлом.Джей?
9 ответов:
проверить Node-Supervisor. Вы можете предоставить ему коллекцию файлов для отслеживания изменений, и он перезапустит ваш сервер, если какой-либо из них изменится. Он также перезапускает его, если он падает на какой-то другой причине.
код"горячей замены" не включен в NodeJS, потому что так легко случайно оказаться с утечками памяти или несколькими копиями объектов, которые не собираются в мусор. Node - это создание ваших программ случайно быстро, а не случайно неплотный.
EDIT, через 7 лет после факта: отказ от ответственности, я написал Node-supervisor, но передал проект другому сопровождающему, прежде чем писать этот ответ.
Nodules-это загрузчик модулей для узла, который обрабатывает автоматическую перезагрузку модулей без перезапуск сервера (так как это то, о чем вы спрашивали):
http://github.com/kriszyp/nodules
Nodules делает интеллектуальное отслеживание зависимостей, поэтому соответствующие фабрики модулей повторно выполняются для сохранения правильных ссылок при перезагрузке модулей без необходимости полного перезапуска.
использовать этот: https://github.com/remy/nodemon
просто запустите приложение, как это:
nodemon yourApp.js
должен быть какой-то акцент на том, что происходит, а не просто модули дробовика в OP. кроме того, мы не знаем, что файлы, которые он редактирует, являются всеми модулями JS или что все они используют вызов "require". Возьмите следующие сценарии с недоверием, они предназначены только для описания того, что происходит, чтобы вы знали как с ней работать.
ваш код уже загружен и сервер работает с это
решение у вас должен быть способ сообщить серверу, какой код изменился, чтобы он мог его перезагрузить. Вы можете настроить конечную точку для получения сигнала, команды в командной строке или запроса через tcp/http, который сообщит ему, какой файл изменился, и конечная точка перезагрузит его.
//using Express var fs = require('fs'); app.get('reload/:file', function (req, res) { fs.readfile(req.params.file, function (err, buffer) { //do stuff... }); });
ваш код может иметь" require " вызовы в нем, который загружает и кэши модули
решение поскольку эти модули кэшируются require, после предыдущего решения вам понадобится строка в конечной точке, чтобы удалить эту ссылку
var moduleName = req.params.file; delete require.cache[moduleName]; require('./' + moduleName);
что такое "кодирование видео"?
по сути, это способ изменить программу во время ее работы, без перезапуск его. Цель состоит в том, чтобы в конечном итоге с программой, которая работает правильно, когда мы (повторно)запускаем его. Чтобы быть полезным, это помогает иметь редактор, который можно настроить для отправки кода на сервер.
взгляните:http://lisperator.net/blog/livenode-live-code-your-nodejs-application/
Если вы хотите перезагрузить модуль без перезапуска процесса узла, вы можете сделать это с помощью watchFile
Я думаю узел-инспектор это ваш лучший ставку.
похоже на то, как вы можете изменить на стороне клиента JS-код в Chrome Dev tools, это использует интерфейс Chrome (Blink) Dev Tools для обеспечения редактирования кода в реальном времени.
https://github.com/node-inspector/node-inspector/wiki/LiveEdit
вы также можете использовать инструмент PM2. Который является передовым инструментом производственного процесса для узла js. http://pm2.keymetrics.io/
простое прямое решение со ссылкой на все ответы, доступные здесь:
документация узла говорит, что fs.смотрите является более эффективным, чем fs.watchFile & он может смотреть всю папку.
(Я только начал использовать это, так что не уверен, существуют ли какие-либо недостатки)
fs.watch("lib", (event_type, file_name) => { console.log("Deleting Require cache for " + file_name); delete require.cache[ require.resolve("./lib/" + file_name)]; });