【问题标题】:How can I evaluate Javascript ES6 code at runtime?如何在运行时评估 Javascript ES6 代码?
【发布时间】:2018-07-29 11:08:56
【问题描述】:

我想使用 Node.js 在运行时执行 ES6 代码。给定一串代码:

const es6code = 'const square = (b) => { return b * b; }';
es6Eval(es6code)(5)

es6Eval 函数会将 es6 转换为 es5 并在运行时评估代码。

我该怎么做?

【问题讨论】:

  • 鉴于const es6code 中的const,您将在“ES6”(即ES2015+)环境中运行此代码。所以...const f = eval(es6code),然后是 f(5)(必要时) -- IF您信任代码的来源,并乐于在您的环境中运行该代码。
  • var fn = Function("alert('hello world')"); fn();
  • 既然你使用的是 Node.js,它确实支持 ES6,为什么不使用原生的 eval 函数呢?
  • 我上面的评论对于es6code 来说并不完全;我已经发布了一个答案。

标签: javascript node.js ecmascript-6 babeljs transpiler


【解决方案1】:

首先,让我们解决这个问题:您必须相信该代码的来源。您正在询问如何从您的环境中的字符串运行任意代码。如果该代码是恶意的,则可能会发生不好的事情。所以你必须相信代码的来源(例如,是谁给你的)。

假设您信任从谁那里获取代码:

  1. 鉴于const es6code 中的const,您正在“ES6”(即 ES2015+)环境中运行此代码。所以...

    const f = new Function(es6code + "; return square;")();
    // Note ----------------------^^^^^^^^^^^^^^^^^^^^^ ^^
    // And --------------------------------------------/
    

    然后

    console.log(f(5)); // 25
    
  2. 如果需要先转译,使用Node API for Babel先转码:

    var code = require("babel-core").transform(es6code, options);
    

    ...然后对结果执行 #1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2012-10-25
    • 1970-01-01
    • 2016-12-23
    • 2013-03-25
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多