如何在运行时评估Javascript ES6代码?

时间:2018-02-19 08:52:07

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

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

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:4)

首先,让我们解决这个问题:你必须信任该代码的来源。您正在询问如何从环境中的字符串运行任意代码。如果该代码是恶意的,那么可能会发生坏事。因此,您必须信任代码的来源(例如,无论是谁给了您)。

假设您信任以下任何人从中获取代码:

  1. 鉴于const中的const es6code,您在“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。