我有一个index.js,它在定义一些帖子和获取内容后使用app.listen()构成了一个网络层。在其中,我将监视程序设置为监视./libs文件夹中的另一个.js文件,以了解对其所做的任何更改。进行更改后,我希望它从它导出到index.js Web服务的功能中传播更新,而无需重新启动它们。
在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,
...
};
我期望发生的事情是,在使用npm start启动node.js index.js文件之后,我可以首先调用Web服务get()并在控制台上看到“ test123”打印内容。然后,我想将“ test123”更改为“ testABC”,并保存文件,然后当我再次调用get()时,我希望将“ testABC”打印到控制台。现在,在重新启动服务器之前,我仍然会看到“ test123”,如果可能的话,我希望避免这种情况。
是否可以在运行时重新加载require()?