JavaScript 解释器 eval5

MIT
JavaScript
跨平台
2020-02-06
随心_

eval5

基于 JavaScript 编写的 JavaScript 解释器

解决在不支持evalFunction的执行环境下执行 JavaScript 代码。例如:微信小程序 示例

Usage

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) {
	//..
}

Interpreter

static version

VERSION

static global

object 默认:Object.create(null)

设置默认作用域对象

例如:

Interpreter.global = window;

static eval

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

static Function

readonly

替代原有的Function占位符

作用同Interpreter.eval

除非不支持Function的环境,否则不建议使用

evaluate(code, {
...
Function: Interpreter.Function
})

constructor(ctx: {}, options?: { timeout?: number})

构造函数

var interpreter = new Interpreter(window);

evaluate(code: string, ctx?: {}): any

返回脚本中执行的最后一个表达式结果

var interpreter = new Interpreter(window);
interpreter.evaluate("alert(1+1)");

setExecTimeout(timeout: number)

单位:ms

evaluate(code: string, ctx?: {})

执行给定的字符串脚本,返回脚本中执行的最后一个表达式结果

evaluate("console.log(1+1)", { console: console });

Function

同 js 原生的 Function

const func = new Function("a", "b", "return a+b;");
console.log(func(1, 2));

vm

参考 node.js vm

支持 api 列表:

  • vm.createContext
  • vm.compileFunction
  • vm.runInContext
  • vm.runInNewContext
  • vm.Script

Support

  • ECMA5

 

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);

效果示例:

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

eval5 1.3.0 发布:JavaScript 解释器

eval5是完全基于JavaScript编写的JavaScript解释器,支持ECMA5语法。常用于不支持 eval/Function 的JavaScript运行环境,例如:微信小程序 更新内容: 新增 Interprete.ecmaVersion属性,设置...

02/16 10:18

eval5 1.2.0 发布:JavaScript 解释器

eval5是完全基于JavaScript编写的JavaScript解释器,支持ECMA5语法。常用于不支持 eval/Function 的JavaScript运行环境,例如:微信小程序 本次更新内容如下: Interpreter.prototype.evalua...

02/07 23:43

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

暂无博客

返回顶部
顶部