独立可执行文件
当原生包的导入可以被静态分析时,Bun 可以在 bun build --compile 生成的可执行文件中嵌入 OpenTUI 的原生包二进制文件。
Linux libc
Linux 默认使用 glibc 原生包。对于 musl 构建,请在构建时定义 process.env.OPENTUI_LIBC,以便 Bun 可以移除未使用的分支并仅嵌入 musl 包。
await Bun.build({
entrypoints: ["./app.ts"],
compile: {
target: "bun-linux-x64-musl",
outfile: "./app-linux-x64-musl",
},
define: {
"process.env.OPENTUI_LIBC": JSON.stringify("musl"),
},
})
对于 glibc Linux 构建,使用 "glibc":
define: {
"process.env.OPENTUI_LIBC": JSON.stringify("glibc"),
}
如果在构建时未定义 process.env.OPENTUI_LIBC,Bun 必须保留该架构的两个 Linux 原生包分支,因为运行时仍可能进行环境选择。
原生包
在编译之前,请确保目标原生包已存在于 node_modules 中。对于多平台发布构建,请在运行 Bun.build() 之前安装所有目标操作系统和 CPU 组合的可选原生包。
bun install --os="*" --cpu="*" @opentui/core@<version>
Alpine
Bun 的 Linux musl 独立运行时在 Alpine 上可能需要标准 C++ 运行时库。在最小 Alpine 镜像中安装它们:
apk add --no-cache libstdc++ libgcc