Автоматическая перезагрузка файлов в Node.js: как реализовать?
Проблема с автоматической перезагрузкой файлов в Node.js
Я ищу идеи о том, как реализовать автоматическую перезагрузку файлов в Node.js. Меня уже достало каждый раз перезапускать сервер при изменении файлов.
Согласно всему, что я читал, функция require()
в Node.js не перезагружает файлы, если они уже были загружены. Поэтому мне нужно сделать что-то вроде нижеприведенного кода:
var http = require('http'),
posix = require('posix'),
json = require('./json');
var script_name = '/some/path/to/app.js';
this.app = require('./app').app;
process.watchFile(script_name, function(curr, prev){
posix.cat(script_name).addCallback(function(content){
process.compile(content, script_name);
});
});
http.createServer(this.app).listen(8080);
В файле app.js
у меня есть следующий код:
var file = require('./file');
this.app = function(req, res) {
file.serveFile(req, res, 'file.js');
}
Однако это тоже не работает — я получаю ошибку в строке с process.compile()
, которая говорит, что require
не определен. Похоже, что process.compile
выполняет код app.js
, но не знает о глобальных объектах Node.js.
Не подскажете, как можно решить эту проблему и сделать автоматическую перезагрузку файлов без необходимости вручную перезапускать сервер?
5 ответ(ов)
Вы можете использовать следующий код, чтобы удалить кэш модуля в Node.js:
delete require.cache['/home/shimin/test2.js'];
Этот способ позволяет удалить модуль из кэша, что может быть полезно, если вы вносите изменения в файл и хотите, чтобы они применились без перезапуска приложения. Просто замените путь на нужный вам, и после этого вы сможете заново загрузить модуль с использованием require()
.
nodemon оказался первым в поиске Google, и, судя по всему, выполняет свою задачу. Вот шаги, которые нужно выполнить:
Установите nodemon глобально:
npm install nodemon -g
Перейдите в директорию, где находится ваше приложение:
cd путь_к_вашему_приложению
Запустите ваше приложение с помощью nodemon:
nodemon app.js
Теперь ваше приложение будет автоматически перезапускаться при внесении изменений в код, что существенно ускорит процесс разработки.
nodemon
— отличное решение для автоматического перезапуска приложения. Я добавляю дополнительные параметры для отладки и опций наблюдения.
package.json
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon --watch server --inspect ./server/server.js"
}
Команда: nodemon --watch server --inspect ./server/server.js
Объяснение параметров:
--watch server
— перезапускает приложение при изменении файлов.js
,.mjs
,.coffee
,.litcoffee
и.json
в папкеserver
(включая подкаталоги).--inspect
— включает удаленную отладку../server/server.js
— это точка входа.
Затем добавьте следующую конфигурацию в launch.json
(VS Code), чтобы начать отладку в любое время.
{
"type": "node",
"request": "attach",
"name": "Attach",
"protocol": "inspector",
"port": 9229
}
Обратите внимание, что лучше установить nodemon
какdev-зависимость проекта. Таким образом, вашим коллегам не нужно будет его устанавливать или запоминать аргументы команд, им достаточно выполнить npm run dev
и начать работать.
Дополнительную информацию можно найти в документации nodemon
: https://github.com/remy/nodemon#monitoring-multiple-directories
Вы можете установить Node-Supervisor с помощью следующей команды:
npm install supervisor
Дополнительную информацию можно найти на официальной странице проекта: http://github.com/isaacs/node-supervisor.
Если у вас возник вопрос о том, как использовать node-dev
, вот краткое руководство:
node-dev
работает отлично и просто в установке. Для начала вам нужно установить его с помощью npm:
npm install node-dev
После установки, node-dev
будет автоматически уведомлять вас, когда сервер перезагружается, и отображать сообщения об успехе или ошибках.
Чтобы запустить ваше приложение, используйте следующую команду в терминале:
node-dev app.js
Это должно помочь вам быстро начать работу с вашим проектом!
Использование async/await с циклом forEach
Как получить полный объект в console.log() Node.js, а не '[Object]'?
Как прочитать JSON-файл в память сервера?
Обнаружена ошибка: Невозможное нарушение: Неверный тип элемента: ожидался строковый тип (для встроенных компонентов) или класс/функция, но получен объект
Как скачать файл с помощью Node.js (без использования сторонних библиотек)?