我问这个,因为我现在没有工具或时间来测试这个,但这个想法让我感到烦恼。当我有时间玩它时,我会自己回答。
在node.js中,require()如何工作?它是否在内存中保留了所需的功能?或者它会重新读取文件吗?
例:
launcher.js
var cluster = require('cluster');
if (cluster.isMaster) {
cluster.fork();
cluster.on('exit', function () {
cluster.fork();
}
}
if (cluster.isWorker) {
var self = require('self_modifying.js');
self.start()
}
只要self_modifying.js有一个start()函数,它就是' main'方法,它可以通过修改自己的源文件和process.exit(0)进行自我更新,然后用它重新启动新代码?
答案 0 :(得分:3)
回答:
在node.js中,require()如何工作?它是否在内存中保留了所需的功能?或者它会重新读取文件吗?
在node.js中,当执行require时,它将缓存正在加载的模块,因此每次进一步需要调用都将从内存加载,而不是从磁盘加载优化。请参阅:http://nodejs.org/api/modules.html#modules_caching
答案 1 :(得分:1)
正如@Tom Grant指出的那样,模块是缓存的。因此,您需要在重新开始之前尊重您的应用程序,例如解释here
这项工作,但需要self_modifying.js导出函数start
var cluster = require('cluster');
if (cluster.isMaster) {
cluster.fork();
cluster.on('exit', function () {
delete require.cache[require.resolve('/full/path/to/self_modifying.js')];
cluster.fork();
}
}
if (cluster.isWorker) {
var self = require('self_modifying.js');
self.start()
}