@earendil-works/djs

中文文档
0.1.0发布于 2026/11/06MIT OR Apache-2.0TypeScriptES Module零依赖构建来源已验证近 30 天下载 2903

WebAssembly中一个小型的沙盒JavaScript和TypeScript引擎:以燃料和内存限制运行不可信脚本,并暂停运行会跑入后期会继续的垃圾堆.

中文使用文档
文档目录6 节
  1. 安装
  2. 使用
  3. 入境点
  4. 正在装入模块
  5. 文档
  6. 许可证

@earendil-works/djs (英语)

djs 是一个小的 JavaScript 和 TypeScript 引擎编译到 Web Assembly, 用于运行 主机内部的不可信脚本:代理工具脚本,插件,用户代码. 每个沙盒 所以沙盒什么也没有 脚本只获得 运行在燃料预算和内存上限下,运行在 在主机上等待可被暂停为垃圾堆, 普通 JavaScript 文件, 并继续 稍后在另一个过程中.

模块没有导入,软件包没有依赖性:在节点运行(20个或更新的), Bun, Deno, 浏览器和网络工人.

安装

npm install @earendil-works/djs

使用

import { Sandbox } from "@earendil-works/djs";

const sandbox = await Sandbox.create({
  asyncFunctions: { "tools.search": async (q) => search(q) },
  maxFuel: 50_000_000,
  memoryLimit: 64 << 20,
});

// A script is the body of an async function: its parameters are the keys of the second
// argument, and `await` and `return` work at the top level.
const hits = await sandbox.runAsync("return (await tools.search(query)).slice(0, 3)", { query: "djs" });
sandbox.run("return a + b", { a: 40, b: 2 }); // 42
sandbox.dispose();

选项包括 typescript: true (文字为TypeScript), console (何处) console.log 继续, globals, (中文(简体) ), deterministic (可重复运行)和 frozenBuiltins。 。 。 . 错误是 SandboxErrors 与一个 kind数字 : threw, (中文(简体) ), syntax, (中文(简体) ), fuel, (中文(简体) ), memory,, , , , , , , , .

入境点

导入模块页:1
@earendil-works/djswasm/djs.wasm每个主机
@earendil-works/djs/slimwasm/djs-slim.wasm计算千字节的主机: 没有键入数组, BigInt, 转发器助手和其他家庭脚本很少使用
@earendil-works/djs/dumpwasm/djs-dump.wasm挂起的主机会运行到垃圾堆: 主模块加垃圾堆
@earendil-works/djs/dump-runtime帮助者需要用 Djs 以外的 JavaScript 引擎继续堆放

每个切入点输出相同的API,以自己的模块为默认. 丢弃跑道 在较小的主模块中运行时,将倾卸模块作为沙箱 dumpModule数字 :

import { Sandbox } from "@earendil-works/djs";
import { loadModule as loadDumpModule } from "@earendil-works/djs/dump";

const sandbox = await Sandbox.create({ frozenBuiltins: true, dumpModule: await loadDumpModule(), asyncFunctions });
const task = sandbox.start(code, params);
const dump = await task.suspend(); // later, anywhere: (await Sandbox.resume(dump, options)).result

正在装入模块

Sandbox.create 每个进程装入其入口模块并缓存; loadModule(location) 又装入一个 new Sandbox({ module }) 用这个 在节点, Bun和Deno 模块是从软件包读取的 wasm/ 目录( e)$DJS_WASM 名称 )). . . 在浏览器中从 URL 中获取 new URL("../wasm/djs.wasm", import.meta.url),一个图案,网络包装和Vite识别 并抄入建筑。 在 Vite 的 Dev 服务器中, 将软件包排除在依赖之外 预捆绑,将代码从模块中移出:

// vite.config.js
export default { optimizeDeps: { exclude: ["@earendil-works/djs"] } };

在 Deno 中,允许读取软件包的目录(--allow-read) (中文(简体) ). 带着一个捆绑工 不知道模式,服务于 .wasm 存档并传递其 URL : Sandbox.create({ module: await loadModule("/assets/djs.wasm") })。 。 。 .

文档

指南 整个API 语言 djs 运行,限制,决定主义和垃圾堆: https://earendil-works.github.io/djs/js-api.html 互联网档案馆的存檔,存档日期2013-12-22

许可证

麻省理工或Apache -2.0,由你选择.

版本与发布记录

@earendil-works/djs 共发布 3 个版本,首次发布于 2026/11/06;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.0latest2026/11/067 天前
0.0.12026/11/067 天前
0.0.0-stage2026/11/067 天前

关于 @earendil-works/djs 的常见问题

@earendil-works/djs 是什么?

WebAssembly中一个小型的沙盒JavaScript和TypeScript引擎:以燃料和内存限制运行不可信脚本,并暂停运行会跑入后期会继续的垃圾堆.

如何安装 @earendil-works/djs?

在项目目录运行 npm install @earendil-works/djs,或使用 pnpm add / yarn add / bun add。

@earendil-works/djs 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@earendil-works/djs 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@earendil-works/djs 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@earendil-works/djs 可以商用吗?

@earendil-works/djs 使用 MIT OR Apache-2.0 许可。可在 MIT、Apache-2.0 中任选其一遵守。选择 MIT 时,宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@earendil-works/djs 的下载量有多少?

根据 npm 官方下载统计,@earendil-works/djs 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,903 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@earendil-works/djs 还在维护吗?

最新版本 0.1.0 发布于 2026/11/06(7 天前);至今共发布 3 个版本,其中过去 12 个月发布了 3 个;首次发布于 2026/11/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。