Javascript Decache Node.JS,“文件”;“不需要”;问题
我正在尝试创建一个脚本,该脚本能够通过模块解缓存删除模块 经过大量研究,我发现这是可能的,每个人都将其描述为使用不同于正常的require语法 不幸的是,我尝试了所有不同的方法,但似乎没有任何方法能够解除模块 这是代码Javascript Decache Node.JS,“文件”;“不需要”;问题,javascript,node.js,caching,module,Javascript,Node.js,Caching,Module,我正在尝试创建一个脚本,该脚本能够通过模块解缓存删除模块 经过大量研究,我发现这是可能的,每个人都将其描述为使用不同于正常的require语法 不幸的是,我尝试了所有不同的方法,但似乎没有任何方法能够解除模块 这是代码 \\server.js var plugins = require(__dirname + '\\plugins\\catelog.js'); console.log('server started'); plugins.magic();
\\server.js
var plugins = require(__dirname + '\\plugins\\catelog.js');
console.log('server started');
plugins.magic();
plugins.decache('./log/log.js');
plugins.magic();
下面是我的项目需要的所有需求的清单
\\plugins\catelog.js
var nfo = {
fname: __dirname + '//catelog.js',
cname: 'Catelog',
wd: __dirname,
purpose: 'list of sources for require statement.',
exuse: "require(wd + '\\httpd.js');"
};
console.log(nfo.cname + ' Plugin Mounted Sucsesfully');
//indecahable entities.
//essential packages.
var decache = require('decache');
//decachable entities.
//your custom code
var httpd = require('./httpd/httpd.js');
var logd = require('./log/log.js');
module.exports = {
catelog: nfo,
httpd: httpd,
log: logd,
magic: logd.magic,
logd: logd.logd,
decache: decache
};
下面是我尝试去缓存的示例日志模块
\\plugins\log\log.js
var nfo = {
fname: './log/log.js',
wd: __dirname,
cname: 'Logging',
purpose: 'log server for the main server.',
exuse: "function(logfile,logtext,err);"
};
var fs = require('fs');
console.log(nfo.cname + ' Plugin Mounted Sucsesfully');
function logd(logfile,logtext,err){
fs.appendFile(__dirname + "../../" + logfile, '\r\n' + logtext, function (err) {
if (err){
console.log(err);
}
});
};
function magic(text){
console.log('text');
};
module.exports = {
nfo: nfo,
logd: logd,
magic: magic
};
当代码运行时,这就是输出
不幸的是,似乎什么都没有发生,模块没有卸载,并且在衰减前后仍然可以调用来自模块的函数
有人知道为什么会发生这种情况吗?试着包装你最后的插件。magic();暂停。我猜这是在decache完成之前执行的…在使用9000毫秒的超时后,脚本仍然能够调用函数。在查看decache的代码时,它看起来并没有实际销毁对象,只是销毁了缓存。您可能需要将logd设置为null。再看