Vercel 的 scriptc 让 TypeScript 编译成 178K 原生二进制
乌鸦小编 发表于:2026-7-28 01:19 复制链接 发表新帖
阅读数:109
Vercel 的 scriptc 是一个 TypeScript-to-Native 编译器。它做的事情听起来很激进:把你写的标准 TypeScript 代码直接编译成独立可执行的原生二进制,体积 178K 左右,启动时间 2 毫秒,二进制里不带 Node、不带 V8、不带任何 JavaScript 引擎。

更让人意外的是它对 TypeScript 的兼容性。README 里的示例就是一个普通的递归 fib 函数,跟你在 Node 上写的代码完全一样,没有任何注解、没有任何方言。类型检查用真正的 TypeScript 编译器,运行时行为跟 Node 字节级一致。也就是说同一种语言、同一份代码,你可以选择让它跑在 Node 上、或者编译成原生二进制,结果在功能上完全等价。

安装方式是 npm install -g scriptc,跟装其他 Node 工具一样。日常开发用 scriptc run fib.ts 立刻跑一遍,要发布就用 scriptc build fib.ts 生成可分发的二进制。整套工具链都在 npm 生态里,开发者不需要切换到 Rust 工具链、不需要装额外 SDK、不需要学新语言。

这种「零运行时」的 TypeScript 编译思路其实不算全新,Bun 和 Deno 在不同方向上尝试过类似的事情。但 scriptc 的差异化在于它明确把目标定在「产出可分发的小型原生二进制」上,而不是替代 Node 运行时。这意味着它瞄准的场景是 CLI 工具、嵌入式脚本、serverless 函数这种「想要 TypeScript 的开发体验但不想让用户装 Node」的场合。

README 里给的一个数字是 178K——fib 函数编译出来的二进制只有 178KB,启动 2 毫秒。这个尺寸比 Go 写的等效二进制还小,比 Rust 的最小二进制也小一截。考虑到 TypeScript 本身要带类型擦除、字节码转换、运行时初始化等开销,能压到这个体积说明它在 native codegen 路径上做了大量精简。

注释里还提到二进制「self-contained」,意味着不需要运行时依赖、不需要附带 .so 文件、可以单文件分发到 Linux/macOS/Windows 任意机器上直接跑。这对工具作者来说非常友好,GitHub release 页面挂一个二进制链接就行,不用让用户先装 Node、装依赖、看 lockfile。

代码里还藏了一个有意思的细节——它说编译出来的二进制「behaves byte-for-byte like Node」。这种承诺对那种「我已经写了大量 TypeScript 代码想直接迁移到原生」的团队来说非常重要,不需要重写业务逻辑就能拿到原生的性能特征和分发便利。

不过 scriptc 也有限制。它目前还在 Vercel labs 阶段,没有正式 1.0,工具链稳定性、生产级 debug 支持、生态对接都还在补。它适合的是「愿意尝鲜、能接受偶尔踩坑」的开发者,对企业级 SLA 敏感的项目还不到用的时候。

跟同样想做 TypeScript-native 的项目比,scriptc 跟 Bun 的取向不一样。Bun 想替代 Node 运行时(保留 JS 生态),scriptc 想直接产出原生二进制(离开 JS 生态)。前者适合长跑的服务端应用,后者适合一次性 CLI 和分发场景。两者的目标用户重叠但不重合。

把视角拉远一点看,scriptc 反映了 JavaScript/TypeScript 生态 2026 年的一个新方向:语言边界在松动,TypeScript 不再绑定于 V8/Node,开始有能力直接进原生生态。这背后是 LLVM/Cranelift 类编译器基础设施成熟、JavaScriptCore/V8/SpiderMonkey 字节码格式公开化、TypeScript 类型系统可以做更激进的静态分析等一系列底层进展在支撑。

对前端开发者来说,scriptc 提供了一个非常具体的「逃离 Node 依赖」路径。如果你想做一个小工具分发给非开发者用户、或者想在 edge runtime 里跑短脚本、或者想给 CI/CD 写一个轻量级入口脚本,scriptc 现在就值得花一个周末试一试。

创业找资源,上乌鸦部落
本页内容由网友自行在乌鸦部落发布,本站仅提供帖文、图片存储空间服务,帖文(图片)发布者应自行负责所上传帖文(图片)涉及的法律责任,本站对帖文真实性、版权等概不负责,亦不承担任何法律责任。
条评论
您需要登录后才可以回帖 登录 | 立即注册
高级
相关推荐

关闭

乌鸦部落