基于 JavaScript 编写的 JavaScript 解释器
解决在不支持eval或Function的执行环境下执行 JavaScript 代码。例如:微信小程序 示例。
eval
Function
npm install --save eval5
import { evaluate, Function, vm, Interpreter } from "eval5"; // 设置默认作用域 Interpreter.global = window; //或 evaluate("1+1", Object.create(window)); evaluate("1+1", window); // 2 const func = new Function("a", "b", "return a+b;"); console.log(func(1, 1)); // 2 const interpreter = new Interpreter(ctx, { timeout: 1000, }); let result; try { result = interpreter.evaluate("1+1"); console.log(result); //2 } catch (e) { //.. }
version
VERSION
global
object 默认:Object.create(null)
object
Object.create(null)
设置默认作用域对象
例如:
Interpreter.global = window;
readonly
替代原有的eval占位符
如果执行环境支持 eval 函数建议使用原生的 eval,除非 eval 需要使用局部变量时,如下情况:
const ctx = Object.create(window); ctx.eval = Interpreter.eval; const interpreter = new Interpreter(ctx); interpreter.evaluate(` function test(){ var a = 1; return eval('a+1') } test(); `); // output 2
替代原有的Function占位符
作用同Interpreter.eval
Interpreter.eval
除非不支持Function的环境,否则不建议使用
evaluate(code, { ... Function: Interpreter.Function })
constructor
构造函数
var interpreter = new Interpreter(window);
evaluate
返回脚本中执行的最后一个表达式结果
var interpreter = new Interpreter(window); interpreter.evaluate("alert(1+1)");
单位:ms
执行给定的字符串脚本,返回脚本中执行的最后一个表达式结果
evaluate("console.log(1+1)", { console: console });
同 js 原生的 Function
const func = new Function("a", "b", "return a+b;"); console.log(func(1, 2));
参考 node.js vm
node.js vm
支持 api 列表:
github仓库地址: https://github.com/bplok20010/eval5
在线示例: https://bplok20010.github.io/eval5/
在eval5解释器上运行echart4示例:
步骤一、复制 https://cdn.jsdelivr.net/npm/echarts@4.6.0/dist/echarts.min.js 代码,并粘贴到在线示例中运行。
步骤二、清除步骤一运行的代码,复制以下代码并运行:
root.style.height = '300px'; // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('root')); // 指定图表的配置项和数据 var option = { title: { text: 'ECharts 入门示例' }, tooltip: {}, legend: { data:['销量'] }, xAxis: { data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"] }, yAxis: {}, series: [{ name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option);
效果示例: