如何完全删除具有所有功能甚至包括 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 状态,我将无法选择。我说的对吗?
并且不要忘记他们可以通过分配给 global
(global.foo = 42
或类似的)来设置全局变量。一旦创建了一个全局变量,您就不知道它是谁创建的,也不知道它是否应该被删除。
是的,您说得对,您无法完全清理 Node 模块。
绝对肯定,不要运行他们都在同一个过程中。
即使您将它们作为单独的进程生成,除非您绝对信任每一位作者,否则您不能只运行他们给您的代码.您需要做更多的事情来保护自己(chroot 监狱,诸如此类)。保护自己需要做的事情的完整列表对于 SO question/answer.
来说太宽泛了
但基本答案还是:是的,你是对的,一旦加载,你就无法完全清理 Node 模块。不要将他们的代码加载到您的进程中。
我正在开发一个 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 状态,我将无法选择。我说的对吗?
并且不要忘记他们可以通过分配给 global
(global.foo = 42
或类似的)来设置全局变量。一旦创建了一个全局变量,您就不知道它是谁创建的,也不知道它是否应该被删除。
是的,您说得对,您无法完全清理 Node 模块。
绝对肯定,不要运行他们都在同一个过程中。
即使您将它们作为单独的进程生成,除非您绝对信任每一位作者,否则您不能只运行他们给您的代码.您需要做更多的事情来保护自己(chroot 监狱,诸如此类)。保护自己需要做的事情的完整列表对于 SO question/answer.
来说太宽泛了但基本答案还是:是的,你是对的,一旦加载,你就无法完全清理 Node 模块。不要将他们的代码加载到您的进程中。