SableJS:一个更安全、更快速的ECMA5.1 JavaScript解释器

SableJS:一个更安全、更快速的ECMA5.1 JavaScript解释器

sablejs 🏖️ The safer and faster ECMA5.1 interpreter written by JavaScript sablejs 项目地址: https://gitcode.com/gh_mirrors/sa/sablejs

1. 项目介绍

SableJS 是一个使用 JavaScript 编写的 ECMA5.1 解释器。它旨在提供一种更安全、更高效的方式来执行 JavaScript 代码。SableJS 可以用于沙盒环境(如 Figma 插件沙盒),也可以通过 AOT(Ahead-Of-Time)编译将 JavaScript 源代码转换为操作码,从而保护 JavaScript 源代码。

SableJS 已经覆盖了大约 95% 的 test262 es5 测试用例,可以在生产环境中安全使用。

2. 项目快速启动

安装

首先,需要全局安装 SableJS:

npm i sablejs -g

编译代码

假设我们有以下 JavaScript 代码在 fib.js 文件中:

function fib(n) {
    return n < 2 ? n : fib(n - 1) + fib(n - 2);
}
var start = Date.now();
console.log("[INFO] fib: " + fib(30));
console.log("[INFO] time consuming: " + (Date.now() - start) + "ms");

使用 SableJS CLI 工具编译该文件:

sablejs -i fib.js -o output

这会生成一个包含编译后代码的输出文件。

运行编译后的代码

在 Node.js 环境中,运行以下命令来执行编译后的代码:

const VM = require('sablejs/runtime');
const fs = require('fs');

// 导入 console.log 函数到 VM 调用
const vm = new VM();
const vGlobal = vm.getGlobal();
const vConsole = vm.createObject();
const vLog = vm.createFunction('log', function() {
    const temp = [];
    for (let i = 0; i < arguments.length; i++) {
        temp.push(vm.asString(arguments[i]));
    }
    console.log(...temp);
    return vm.createUndefined();
});
vm.setProperty(vConsole, 'log', vLog);
vm.setProperty(vGlobal, 'console', vConsole);

// 请先运行:sablejs -i fib.js -o output
vm.run(fs.readFileSync('./output').toString());
vm.destroy();

在浏览器环境中,可以直接在 HTML 文件中引入编译后的代码:

<script src="https://cdn.jsdelivr.net/npm/sablejs@1.0.8/runtime.js"></script>

然后创建一个 VM 实例并运行编译后的代码:

const VM = SableJS.VM;
const vm = new VM();
const vGlobal = vm.getGlobal();
const vConsole = vm.createObject();
const vLog = vm.createFunction('log', function() {
    const temp = [];
    for (let i = 0; i < arguments.length; i++) {
        temp.push(vm.asString(arguments[i]));
    }
    console.log(...temp);
    return vm.createUndefined();
});
vm.setProperty(vConsole, 'log', vLog);
vm.setProperty(vGlobal, 'console', vConsole);

(async () => {
    const resp = await fetch('output url'); // 替换为 output 文件的 URL
    const data = await resp.text();
    vm.run(data);
    vm.destroy();
})();

3. 应用案例和最佳实践

沙盒环境

SableJS 可以用于创建沙盒环境,例如在 Figma 插件中执行不受信任的代码。

源代码保护

通过将 JavaScript 源代码编译为操作码,可以保护源代码不被轻易反编译。

4. 典型生态项目

目前尚无特定的生态项目列出,但 SableJS 可以与任何需要安全执行或保护 JavaScript 代码的项目配合使用。

sablejs 🏖️ The safer and faster ECMA5.1 interpreter written by JavaScript sablejs 项目地址: https://gitcode.com/gh_mirrors/sa/sablejs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯展隽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值