vercel-labs/scriptc
开发工具把 TypeScript/JavaScript 子集编译成独立原生可执行文件或 WebAssembly,运行时不需要 Node.js。
项目介绍
scriptc 将 TypeScript 和 JavaScript 程序编译为原生可执行文件或 WebAssembly 模块。它利用 TypeScript 编译器已经检查过的类型信息生成机器码,所以产物无需安装 Node.js 即可运行。程序导入的 npm 包会一并编译进产物;编译器无法处理的代码会在构建时给出诊断,并在可能时附带改写建议。它适合希望把 Node 风格程序作为单个自包含二进制分发的开发者。
scriptc 是 Vercel Labs 的实验性项目,只支持 JavaScript、TypeScript 和 Node.js API 的一个子集。对已有程序,应先运行 scriptc coverage 判断可编译比例。具体缺口见限制说明和Node.js 兼容性参考。
安装
安装编译器需要 Node.js 24 或更高版本以及 npm:
$ npm install -g scriptc
编译器本体在 macOS、Linux 和 Windows 上原生运行。Node.js 只用于安装,以及通过 scriptc run 运行 WASI 模块。如果不想用 npm,也可以从 GitHub Releases 获取独立的编译器压缩包 releases。
构建可执行文件还需要链接器以及平台 SDK 或 sysroot。快速开始列出这些前置条件,平台支持说明宿主要求、交叉编译和 WebAssembly。
快速使用
创建 hello.ts:
const who = process.argv.length > 2 ? process.argv[2] : "world";
console.log(`hello, ${who}`);
直接编译并运行:
$ scriptc run hello.ts
hello, world
也可以先产出独立可执行文件,再运行该二进制:
$ scriptc build hello.ts -o hello >/dev/null
$ ./hello scriptc
hello, scriptc
Windows 上构建 hello.exe,然后用 .\hello.exe 运行。在正式构建已有程序前,可先执行 scriptc coverage hello.ts 查看哪些部分可以编译,并阅读覆盖率报告。
Node API 与 npm 包
受支持的 Node API 会编译进原生运行时。例如,以下 HTTP 服务构建后无需安装 Node 即可启动:
import { createServer } from "node:http";
const server = createServer((req, res) => {
res.setHeader("content-type", "application/json");
res.end(JSON.stringify({ path: req.url }));
});
server.listen(8080, () => {
console.log("listening on http://localhost:8080");
});
$ scriptc build server.ts -o server >/dev/null
$ ./server
listening on http://localhost:8080
导入的 npm 包会编译进可执行文件,因此产物运行时不读取 node_modules:
$ npm install picocolors
$ scriptc build cli.ts -o cli >/dev/null
$ ./cli
hello from scriptc
对 npm 包的支持是部分的。npm 依赖文档说明了哪些包可以编译以及如何检查。
使用约束
- 仅支持 JavaScript、TypeScript 和 Node.js API 的一个子集;应通过
scriptc coverage和兼容性参考确认具体程序或包是否可用。 - 构建可执行文件需要链接器和平台 SDK/sysroot,只装编译器还不够。
- 交叉编译和 WebAssembly 各有宿主要求,需单独查阅文档。
- 原生程序对象、通过 FFI 调用 C ABI 函数、嵌入 WASI 模块等进阶用法见对应文档:原生对象、FFI、WASM。
- 项目标注为实验性,行为和覆盖范围可能变化。
HotRepo 点评
在 HotRepo 记录的全语言日榜快照中,scriptc 于 2026 年 9 月 27 日和 28 日分别新增 76 和 102 Star;11 月 2 日仍在 TypeScript 日榜上,当天新增 20 Star,排名第 11。站内没有该项目在全语言日榜上的最佳名次记录,因此排名方面只能依据这几条快照。2026 年 7 月的 Hacker News 发布帖获得 287 分和 156 条评论,讨论更多集中在开发过程而非编译产物本身:有评论者质疑是否有严肃项目会采用它 comment,也有人指出一个体量非常大的提交 reply。另有评论把它与长期朝同一目标的 Porffor 作比较,对其进展速度表示怀疑 comment;simonw 则将这种速度归因于编码智能体,并引用贡献者图表称一周内提交了 91.8 万行代码 reply。另一条批评认为多数 npm 包只提供无类型 JavaScript,因此仍需要 JavaScript 引擎,有回复指出 scriptc 可以为这类依赖可选地打包一个 620KB 的 quickjs-ng 引擎 comment、reply。实际判断应落在具体程序和依赖有多少处于受支持子集内,而这正是 scriptc coverage 要检查的内容。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。