eval5 est basé JavaScript tapuscrit interprète écrit en soutien à 100% pour la syntaxe ES5.
Adresse du projet: https://github.com/bplok20010/eval5
Les scénarios d'utilisation
- l'environnement du navigateur nécessite environnement sandbox d'exécution de script JavaScript
- le contrôle de l'exécution de code à long
- Il ne supporte pas
eval
Function
l'environnement d'exécution JavaScript: applet micro lettre - Etude / apprentissage
installer
npm install --save eval5
utilisation
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 syntaxe ES6 est pas pris en charge, vous pouvez d'abord ES6 ou tapuscrit se transformer en ES5
principe
- eval5 première compilée à partir de la structure d'arborescence de code source arbre de syntaxe abstraite (AST).
arbre de syntaxe abstraite par différents noeuds, chaque noeud identifie le type de déclarations ou d' expressions différentes, par exemple: l'arbre de syntaxe abstraite 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" }
- En fonction du type du module de traitement de noeud, et pour écrire le résultat final. Par exemple: 1 + 1 selon l'arbre de syntaxe, on peut écrire sur le code interprète:
function handleBinaryExpression(node) { switch( node.operator ) { case '+': return node.left.value + node.right.value; case '-': return node.left.value - node.right.value; } }
Exemples
Voici des exemples de résultats analytiques echarts4: