如何完全删除具有所有功能甚至包括 setInterval 的 nodejs 模块?

How to completely remove a nodejs module with all its functionalities even including setInterval?

我正在开发一个 IDE 使开发人员能够开发 express.js 应用程序。因此,开发人员可以创建新的快速应用程序。由于资源消耗至关重要,我不想 运行 每个 express 应用程序都在一个单独的进程中;实际上它们都是 运行ning 在主进程中作为 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- 按照说明删除模块缓存 here。那没有帮助。

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

2- ClearInterval 当 ID 未知时的解释 here。我不想清除所有间隔!而且,它只对setInterval函数有效,其他的呢?!!!

如果模块在主进程中处于 运行ning 状态,我将无法选择。我说的对吗?

并且不要忘记他们可以通过分配给 globalglobal.foo = 42 或类似的)来设置全局变量。一旦创建了一个全局变量,您就不知道它是谁创建的,也不知道它是否应该被删除。

是的,您说得对,您无法完全清理 Node 模块。

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

即使您将它们作为单独的进程生成,除非您绝对信任每一位作者,否则您不能只运行他们给您的代码.您需要做更多的事情来保护自己(chroot 监狱,诸如此类)。保护自己需要做的事情的完整列表对于 SO question/answer.

来说太宽泛了

但基本答案还是:是的,你是对的,一旦加载,你就无法完全清理 Node 模块。不要将他们的代码加载到您的进程中。