Javascript 如何使用nodejs管理完全独立的上下文?
我正在编写一个基于nodejs的javascript测试框架。我的服务器读取Javascript文件,插入指令,然后在自己的上下文中执行它们 它(非常)基本上是这样的: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); 这一切都
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。