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ですターン
原則
- 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" }
- ノード処理モジュールの種類に応じて、最終的な結果を書き込むこと。例:1 + 1構文木によると、私たちは通訳コードについて書くことができます。
function handleBinaryExpression(node) { switch( node.operator ) { case '+': return node.left.value + node.right.value; case '-': return node.left.value - node.right.value; } }
例
以下は、分析結果echarts4の例です。