TypeScript 到原生编译器
scriptc 将 TypeScript 和 JavaScript 编译为类型化 IR、可读 C 代码、文本 LLVM IR、原生汇编和对象文件、原生可执行文件以及 WebAssembly 模块。它使用 TypeScript 编译器进行解析和类型检查。源码输出仅需 Node。在 macOS 15+ arm64 上,普通 LLVM 层级的可执行文件使用 scriptc 自带的辅助程序和预编译运行时包;clang 仅作为平台链接器驱动,不编译程序或运行时 C 代码。
静态构建包含一个小型本机运行时,但不包含 Node 或 JavaScript 引擎。无法静态编译的代码会被报告为诊断信息。对于 npm 包和 any 类型的代码, --dynamic 会明确嵌入 quickjs-ng。scriptc 是一个实验性工具,其目标是 macOS、Linux、Windows 和 WebAssembly 通过 WASI Preview 1。
编译器需要 Node.js 24 或更高版本。--emit=ir|c|llvm 仅需 Node。--emit=asm|obj 使用随 scriptc 在受支持的 macOS、Linux 和 Windows 主机(以及 WASI)上安装的匹配可选平台辅助工具,但不需要编译器、归档器、链接器或 SDK。普通的 LLVM 层级可执行文件构建需要平台链接器驱动程序和 SDK/sysroot,但使用捆绑的辅助工具及预编译运行时包,而非编译生成的或运行时 C 代码。设置 SCRIPTC_LINKER 以选择该驱动程序。显式 C 构建、LLVM 回退、--sanitize 以及已弃用的 SCRIPTC_CC=clang|zigcc 兼容路径还需要一个 C 编译器。它生成的可执行文件不需要 Node。
创建 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
$ ./hello ctate
hello, ctate或者停留在源代码阶段
暂无开放 Issues,或尚未同步最近议题。