Перезагрузите модуль с помощью Node.js require () из триггера-наблюдателя - PullRequest
0 голосов
/ 05 марта 2019

У меня есть index.js, который формирует веб-уровень с помощью app.listen () после определения некоторых записей и запросов.В нем я установил watchr для просмотра другого файла .js в папке ./libs на предмет любых изменений в нем.После внесения изменений я хочу, чтобы оно распространяло обновление из функции, которую оно экспортирует, в веб-службы index.js без перезагрузки.

В index.js ...


var bodyParser = require('body-parser');
const express = require('express');
var app = express();
var myObjFile = require('./libs/myObjFile.js');
var watchr = require('watchr');

var myWatchPath = process.cwd() + '\\libs\\myObjFile.js';
function myListener (changeTyle, fullPath, currentStat, previousStat) {
try {
   switch(changeType) {
      case 'update':
         delete require.cache[require.resolve('./libs/myObjFile.js');
         //for (const path in require.cache) {
         //   if (path.endsWith('myObjFile.js') {
         //      delete require.cache[require.resolve('./libs/myObjFile.js');
         //   }
         //}
         //myObjFile = {};
         myObjFile = require('./libs/myObjFile.js');
      }
   }
   catch (err) {
      console.log('err watcher: ' + err.message);
   }
function next (err) {
   return err.message;
}
var stalker = watchr.open(myWatchPath , myListener, next);

app.use(function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "origin, X-Requested-With, Content-Type, Accept");
   next();
});
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json( {
   extended: try
}));

app.get('/getStuff/', function (req, res) {
   var thisObj = new myObjFile.objCreate('my type', myUUID); 
   thisObj.consoleTest();
})
app.listen(1234);

Вы можетесм. некоторые вещи, которые я попытался закомментировать в середине функции watchr.

//Now inside myObjFile.js
exports.objCreate = function (type, uuid) {
   ...
   function consoleTest() {
      console.log('test123');
   }
   ...
   return {
      ...
      consoleTest: consoleTest,
      ...
   };

Я ожидаю, что после запуска файла index.js node.js с запуском npm яможет сначала вызвать веб-сервис get () и посмотреть печать 'test123' на консоли.Затем я хочу изменить 'test123' на 'testABC' и сохранить файл, затем, когда я снова вызываю get (), я ожидаю увидеть печать 'testABC' на консоли.Пока я продолжаю видеть «test123», пока не перезагружу сервер, которого я хотел бы избежать, если это возможно.

Есть ли способ перезагрузить require () во время выполнения?

...