5

Автоматическая перезагрузка файлов в Node.js: как реализовать?

11

Проблема с автоматической перезагрузкой файлов в 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 ответ(ов)

1

Вы можете использовать следующий код, чтобы удалить кэш модуля в Node.js:

delete require.cache['/home/shimin/test2.js'];

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

0

nodemon оказался первым в поиске Google, и, судя по всему, выполняет свою задачу. Вот шаги, которые нужно выполнить:

  1. Установите nodemon глобально:

    npm install nodemon -g
    
  2. Перейдите в директорию, где находится ваше приложение:

    cd путь_к_вашему_приложению
    
  3. Запустите ваше приложение с помощью nodemon:

    nodemon app.js
    

Теперь ваше приложение будет автоматически перезапускаться при внесении изменений в код, что существенно ускорит процесс разработки.

0

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

0

Вы можете установить Node-Supervisor с помощью следующей команды:

npm install supervisor

Дополнительную информацию можно найти на официальной странице проекта: http://github.com/isaacs/node-supervisor.

0

Если у вас возник вопрос о том, как использовать node-dev, вот краткое руководство:

node-dev работает отлично и просто в установке. Для начала вам нужно установить его с помощью npm:

npm install node-dev

После установки, node-dev будет автоматически уведомлять вас, когда сервер перезагружается, и отображать сообщения об успехе или ошибках.

Чтобы запустить ваше приложение, используйте следующую команду в терминале:

node-dev app.js

Это должно помочь вам быстро начать работу с вашим проектом!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь