代码之家  ›  专栏  ›  技术社区  ›  RaphaMex

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

  •  3
  • RaphaMex  · 技术社区  · 8 年前

    我正在编写一个基于nodejs的javascript测试框架。我的服务器读取javascript文件,为它们提供工具,然后在自己的上下文中执行它们。

    基本上是这样的:

    const file = process.argv[2];
    
    require('fs').readFile(
        file,
        'utf-8',
        (error, data) => {
            eval(data);
        }
    );
    

    这一切都可以正常工作,但我不喜欢将服务器上下文和测试上下文混合在一起。 nodejs如何在完全独立的上下文中执行javascript代码?

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

    other_context.eval(data);
    

    非常感谢你的帮助!

    2 回复  |  直到 8 年前
        1
  •  2
  •   zero298    8 年前

    child_process#fork()

    eval() 这也是

    基本上:

    const {
      fork
    } = require('child_process');
    
    const child = fork(file);
    child.on("message", m => console.log(m));
    

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

        2
  •  1
  •   tne    8 年前

    isolated-vm

    独立VM是一个nodejs库,它允许您访问V8的独立接口。这允许您创建彼此完全隔离的JavaScript环境。如果需要以安全的方式运行一些不受信任的代码,您可能会发现此模块很有用。如果您需要在多个线程中同时运行一些javascript,您可能还会发现这个模块很有用。如果需要同时进行这两项工作,您可能会发现这个项目非常有用!

    推荐文章