独立可执行文件

当原生包的导入可以被静态分析时,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