Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用nodejs管理完全独立的上下文?_Javascript_Node.js - Fatal编程技术网

Javascript 如何使用nodejs管理完全独立的上下文?

Javascript 如何使用nodejs管理完全独立的上下文?,javascript,node.js,Javascript,Node.js,我正在编写一个基于nodejs的javascript测试框架。我的服务器读取Javascript文件,插入指令,然后在自己的上下文中执行它们 它(非常)基本上是这样的: const file = process.argv[2]; require('fs').readFile( file, 'utf-8', (error, data) => { eval(data); } ); other_context.eval(data); 这一切都

我正在编写一个基于nodejs的javascript测试框架。我的服务器读取Javascript文件,插入指令,然后在自己的上下文中执行它们

它(非常)基本上是这样的:

const file = process.argv[2];

require('fs').readFile(
    file,
    'utf-8',
    (error, data) => {
        eval(data);
    }
);
other_context.eval(data);
这一切都很好,但我不喜欢将服务器上下文与测试上下文混合在一起NodeJ如何在完全独立的上下文中执行javascript代码?

理想情况下,应该是这样的:

const file = process.argv[2];

require('fs').readFile(
    file,
    'utf-8',
    (error, data) => {
        eval(data);
    }
);
other_context.eval(data);

非常感谢你的帮助

有多种方法可以做到这一点。您现在可以尝试的最简单的方法是将读取的文件替换为

这意味着您正在一个完全独立的进程中运行,这是很好的,并且您不需要
eval()
这也是非常好的

基本上:

const{
叉
}=需要(“子进程”);
const child=fork(文件);
on(“message”,m=>console.log(m));

主要的事情是从服务器中获取您正在测试的代码。我只是觉得如果你不这样做,会发生可怕的事情

另一个过于宽泛的选择是利用Docker。这样,执行的代码不仅在另一个进程中,而且(这实际上是在广泛地绘制)在另一台计算机上。

可能适合您

隔离vm是一个用于nodejs的库,它允许您访问v8的隔离接口。这允许您创建彼此完全隔离的JavaScript环境。如果您需要以安全的方式运行一些不受信任的代码,您可能会发现此模块很有用。如果您需要在多个线程中同时运行一些JavaScript,您可能会发现这个模块很有用。你可能会发现这个项目非常有用,如果你需要同时做这两件事


fork
为我提供了完美的隔离,但我如何才能轻松地将我的服务器连接到它的子进程?我的服务器在目录上运行监视程序,并在发生更改时执行实时检测。使用
child.on
/
child.send
process.on
/
process.send似乎都是可行的。让我试试这个!用叉子的方法对我有效。最后,我选择了灵活性。如果你想试试我的测试框架:听起来很棒!您是否介意给我一个带有
隔离vm
的代码片段来展示它的样子?为了保护您的整个服务器不受此测试代码的影响,您确实需要一个vm,以便可以在vm中运行新的nodejs进程。新进程保护您的主nodejs进程不受测试代码的影响。VM保护服务器的其余部分不受测试代码的影响。@jfriend00:谢谢您的输入。实际上,我的服务器只是监视本地文件。所以我现在不担心安全问题。我正在尝试一个轻量级的解决方案。但如果它上线,我一定会考虑VM。