eval5 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
eval5 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
eval5 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
eval5 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
eval5 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 JavaScript TypeScript
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
提 交 者 随心_
适用人群 未知
收录时间 2020-02-06

软件简介

eval5

基于 TypeScript 编写的 JavaScript 解释器

支持浏览器、node.js、小程序等 JavaScript 运行环境

在线体验

更多示例

使用场景

  • 浏览器环境中需要使用沙盒环境执行 JavaScript 脚本
  • 控制执行时长
  • 不支持eval Function的 JavaScript 运行环境:如 微信小程序 demo
  • 研究/学习用

支持 ECMAScript 版本

ES5

安装

npm install --save eval5

使用

import { Interpreter } from "eval5";

const interpreter = new Interpreter(window, {
	timeout: 1000,
});

let result;

try {
	result = interpreter.evaluate("1+1");
	console.log(result);

	interpreter.evaluate("var a=100");
	interpreter.evaluate("var b=200");
	result = interpreter.evaluate("a+b");

	console.log(result);
} catch (e) {
	console.log(e);
}

参数

interface Options {
	// 默认为:0,不限制
	timeout?: number;
	// 根作用域,只读
	rootContext?: {} | null;
	globalContextInFunction?: any;
}

Example

import { Interpreter } from "eval5";

const ctx = {};
const interpreter = new Interpreter(ctx, {
    rootContext: window,
	timeout: 1000,
});

interpreter.evaluate(`
    a = 100;
    console.log(a); // 100
`);

window.a;//undefined

Interpreter

version

当前版本

global

默认值: {}

设置默认的全局作用域

Interpreter.global = window;
const interpreter = new Interpreter();
interpreter.evaluate('alert("hello eval5")');

globalContextInFunction

默认值: undefined

eval5 不支持 use strict 严格模式, 在非严格下的函数中this默认指向的是全局作用域,但在eval5中是undefined, 你可以通过globalContextInFunction来设置默认指向。

import { Interpreter } from "Interpreter";

const ctx = {};
const interpreter = new Interpreter(ctx);
interpreter.evaluate(`
this; // ctx
function func(){
    return this; // undefined
}
func();
`);
import { Interpreter } from "Interpreter";

Interpreter.globalContextInFunction = window;
const ctx = {};
const interpreter = new Interpreter({});
interpreter.evaluate(`
this; // ctx
function func(){
    return this; // window
}
func();
`);

再看以下代码:

注意: Illegal invocation 错误

这就是globalContextInFunction默认设为undefined的原因

import { Interpreter } from "Interpreter";

Interpreter.globalContextInFunction = {};

const ctx = {alert: alert};

const interpreter = new Interpreter(ctx);

interpreter.evaluate(`
// alert.call({}, 'Hello eval5')
// Illegal invocation
alert('Hello eval5');
`);

constructor(context?: {}: options: Options = Interpreter.global)

构造函数

Interpreter 的实例方法

evaluate(code: string): any

执行给定的字符串代码,并返回最后一个表达式的值

import { Interpreter } from "Interpreter";

const interpreter = new Interpreter(window);

const result = interpreter.evaluate(`
var a = 100;
var b = 200;

a+b;

`);

console.log(result); // 300

appendCode(code: string): any

evaluate的别名

getExecutionTime(): number

获取上一次调用evaluate的执行时长

setExecTimeout(timeout: number = 0): void

设置执行时长

getOptions(): Readonly<Options>

获取解释器参数


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

执行给定的字符串代码,并返回最后一个表达式的值

注: 该函数每次执行都会创建一个新的解释器

import { evaluate } from "eval5";

evaluate(
	`
var a = 100;
var b = 100;
console.log(a+b);
`,
	{ console: console }
); // 200

evaluate(`
    a;
`); // a is not defined

Function

该函数会将Interpreter.global Interpreter.globalContextInFunction当作默认值并创建新的解释器

import { Function } from "eval5";

const func = new Function("a", "b", "return a+b;");
console.log(func(100, 200)); // 300

vm

查看 vm

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

License

MIT

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
发表于AI & 大数据专区
2020/09/12 13:32

eval5 1.4.6 发布,JavaScript 解释器

eval5是基于TypeScript编写的JavaScript解释器,100%支持ES5语法。 支持浏览器、node.js、小程序等 JavaScript 运行环境 。 项目地址: https://github.com/bplok20010/eval5 示例 使用场景: 浏览器环境中需要沙盒环境来执行JavaScript代码 浏览器环境控制代码执行时长 不支持eval/Function的JavaScript运行环境,如:微信小程序 更新内容: 支持默认导出 evaluate 支持 **= 运算符 构建配置调整...

2
10
发表于大前端专区
2020/04/19 08:40

eval5 1.4.5 发布,JavaScript 解释器

eval5是基于TypeScript编写的JavaScript解释器,100%支持ES5语法。 支持浏览器、node.js、小程序等 JavaScript 运行环境 。 项目地址: https://github.com/bplok20010/eval5 示例 使用场景: 浏览器环境中需要沙盒环境来执行JavaScript代码 浏览器环境控制代码执行时长 不支持eval/Function的JavaScript运行环境,如:微信小程序 更新内容: 修复with语句中函数调用时丢失this信息,如: var obj = { name: 'eval5', f...

4
5
发表于大前端专区
2020/04/11 10:07

eval5 1.4.4 发布,JavaScript 解释器

eval5是基于TypeScript编写的JavaScript解释器,100%支持ES5语法。 支持浏览器、node.js、小程序等 JavaScript 运行环境 。 项目地址: https://github.com/bplok20010/eval5 示例 使用场景: 浏览器环境中需要沙盒环境来执行JavaScript代码 浏览器环境控制代码执行时长 不支持eval/Function的JavaScript运行环境,如:微信小程序 更新内容: 修复在未使用try-catch情况下出现异常时导致下次调用evaluate时的变量声明错乱问题。...

4
5
发表于大前端专区
2020/04/05 16:12

eval5 1.4.3 发布,JavaScript 解释器

eval5是基于TypeScript编写的JavaScript解释器,100%支持ES5语法。 支持浏览器、node.js、小程序等 JavaScript 运行环境 。 项目地址: https://github.com/bplok20010/eval5 示例 使用场景: 浏览器环境中需要沙盒环境来执行JavaScript代码 浏览器环境控制代码执行时长 不支持eval/Function的JavaScript运行环境,如:微信小程序 更新内容: 修复 WithStatement 中赋值不生效问题。 rootContext创建调整为:Object.create(opt...

0
8
发表于大前端专区
2020/03/25 16:28

eval5 1.4.2 发布,JavaScript 解释器

eval5是基于TypeScript编写的JavaScript解释器,支持ECMA5语法。 示例 使用场景: 浏览器环境中需要沙盒环境来执行JavaScript代码 浏览器环境控制代码执行时长 不支持eval/Function的JavaScript运行环境,如:微信小程序 更新内容: 新增内置对象: URIError RangeError SyntaxError ReferenceError 修复 assignment 表达式触发对象的getter方法调用 修复再次执行事超时机制失效问题 修复函数表达式赋值时引起的返回值错乱问题 ...

0
7
发表于大前端专区
2020/03/16 10:10

eval5 1.4.0 发布,JavaScript 解释器

eval5是完全基于JavaScript编写的JavaScript解释器,支持ECMA5语法。 使用场景: 浏览器环境中需要沙盒环境来执行JavaScript代码 控制代码执行时长 不支持eval/Function的JavaScript运行环境,如:微信小程序 更新内容: 解释器内部eval/Function重写 新增参数 options.rootContext 新增参数 options.globalContextInFunction 移除 Interpreter.rootContext 项目地址: https://github.com/bplok20010/eval5 体验地址:https:/...

0
4
发表于大前端专区
2020/03/09 12:36

eval5 1.3.1 发布,JavaScript 解释器

eval5是完全基于JavaScript编写的JavaScript解释器,支持完整ECMA5语法。常用于不支持 eval/Function 的JavaScript运行环境,例如:微信小程序 更新内容: 修复evaluate在部分情况下返回上一次的求值(#2) 项目地址: https://github.com/bplok20010/eval5 体验地址:https://bplok20010.github.io/eval5...

0
5
发表于大前端专区
2020/02/16 10:18

eval5 1.3.0 发布:JavaScript 解释器

eval5是完全基于JavaScript编写的JavaScript解释器,支持ECMA5语法。常用于不支持 eval/Function 的JavaScript运行环境,例如:微信小程序 更新内容: 新增 Interprete.ecmaVersion属性,设置要解析的ECMA版本,默认为:5,不建议修改!如果设置的数值为6以上的版本可能导致解释出错或得到非预期结果,例如,设Interprete.ecmaVersion为6,虽然能解析,eval5会忽略let声明,当作var用: ... for(let i = 0; i < 10; i++) {...

0
7
发表于大前端专区
2020/02/07 23:56

eval5 1.2.0 发布:JavaScript 解释器

eval5是完全基于JavaScript编写的JavaScript解释器,支持ECMA5语法。常用于不支持 eval/Function 的JavaScript运行环境,例如:微信小程序 本次更新内容如下: Interpreter.prototype.evaluate取消第二个参数context,context统一在实例时指定 Interpreter.prototype.evaluate新增别名Interpreter.prototype.appendCode 修复同一实例下多次调用evaluate或导致function.toString错乱 import { Interpreter } from 'eval5'; ...

2
7
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/04/05 10:30

eval5: TypeScript编写的JavaScript解释器

eval5是基于TypeScript编写的JavaScript解释器,100%支持ES5语法。 项目地址: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')...

0
0
2020/11/20 17:30

技术周刊 · 此路不通?Vue 3 新提案 Ref-sugar

随着 Vue 3 发布,相关的新闻也逐渐火热起来,而近期 RFC 中两个新的提案也因为某乎上的一些事情变得广为人关注。Ref sugar和script setup两个提案同生不同命,在社区开发者中的评价天差地别,但是当我们冷静下来,此路真的不通?推荐这篇尤大点赞的文章给大家,立场客观,读完或许你也可以从框架作者的角度来看待所谓 RFC。 登高远眺— 天高地迥,觉宇宙之无穷 基础技术 打怪升级之路——我的富文本编辑器 造轮子是程序猿前进的...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
21 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部