如何完全删除一个nodejs模块的所有function,甚至包括setInterval?

我正在开发一个IDE,使开发人员能够开发express.js应用程序。 所以开发者可以创build新的快速应用程序。 由于资源消耗至关重要,因此我不想在单独的过程中运行每个快速应用程序。 实际上它们都是作为node.js模块在主进程中运行的。 现在的问题是我不知道开发人员编写什么代码,例如他们是否使用像setInterval这样的函数。 让我再解释一下:

假设这是主程序:

'use strict' const mainApp = require('express')(); require('./userModule.js')(); mainApp.delete('/', function(req, res){ /* What should I do here to delete the user code? */ res.status(202).send('deleted'); }); mainApp.listen(8000, () => console.log('Example app listening on port 8000!')) 

这是用户在userModule.js函数中编写的代码:

 'use strict' module.exports = function(){ // code written by user will come below setInterval(function(){ console.log('hello!!!'); }, 3000); // code written by user will come above } 

我已经知道以下几点:

1-按照此处所述删除模块caching。 这没有帮助。

 delete require.cache[require.resolve('./userModule.js')]; 

如此处所解释的,当ID未知时,2-清除间隔。 我不想清除所有间隔! 而且,它只适用于setInterval函数,其他的呢?

我正在达成的一个观点是,如果模块在主进程中运行,没有select。 我对吗?

不要忘记,他们可以通过分配globalglobal.foo = 42或类似的)来设置全局variables。 一旦创build了全球化,你就不知道是谁创build了它,是否应该删除它。

是的,你是正确的,你不能完全清理节点模块。

绝对肯定,不要在同一个过程中运行它们。

即使你将它们作为独立的进程产生,除非你绝对相信每一个作者,你不能只运行它们给你的代码。 你需要做更多的事情来保护自己(chroot监狱,那种事情)。 为了保护自己,你需要做的事情的完整列表对于SO问题/答案来说太广泛了。

但是,基本的答案是:是的,你是正确的,你不能完全清理一旦加载一个节点模块。 不要将他们的代码加载到你的程序中。