eval5:書かれた活字体のJavaScriptインタプリタ

eval5は、ES5の構文については、100%のサポートで書かれた活字体のJavaScriptインタプリタをベースにしています。

プロジェクト住所:https://github.com/bplok20010/eval5

利用シナリオ

  • ブラウザ環境では、JavaScriptのスクリプトの実行サンドボックス環境が必要です
  • ロングコードの実行制御
  • それはサポートしていないeval Functionマイクロ手紙アプレット:JavaScriptのランタイム環境を
  • 研究/学習

インストール

npm install --save eval5

使用

import { Interpreter } from 'eval5';

const ctx = {
    console,
    hello(){
        console.log('hello eval5')
    }
}
var interpreter = new  Interpreter(ctx, {
    timeout: 1000
});

var result = interpreter.evaluate(`
    hello();
    function sum(a, b) {
        return a + b;
    }
    sum(100,2 00);
`)

console.log(result); // 300

eval5 ES6構文はサポートされていない、あなたが最初にES6缶やES5にtypescriptですターン

原則

  1. eval5最初のソースコードツリー構造抽象構文ツリー(AST)からコンパイル。
    抽象構文木1 + 1:異なるノードによる抽象構文ツリーは、各ノードは、文または例えば異なる表現のタイプを識別する
    {
    "type": "Program",
    "body": [
        {
            "type": "ExpressionStatement",
            "expression": {
                "type": "BinaryExpression",
                "operator": "+",
                "left": {
                    "type": "Literal",
                    "value": 1,
                    "raw": "1"
                },
                "right": {
                    "type": "Literal",
                    "value": 1,
                    "raw": "1"
                }
            }
        }
    ],
    "sourceType": "script"
    }
  2. ノード処理モジュールの種類に応じて、最終的な結果を書き込むこと。例:1 + 1構文木によると、私たちは通訳コードについて書くことができます。
    function handleBinaryExpression(node) {
    switch( node.operator ) {
        case '+':
            return node.left.value + node.right.value;
        case '-':
            return node.left.value - node.right.value;
    }
    }

eval5:書かれた活字体のJavaScriptインタプリタ

オンライン体験

より多くの例

以下は、分析結果echarts4の例です。
eval5:書かれた活字体のJavaScriptインタプリタ

おすすめ

転載: blog.51cto.com/7453775/2484869