使用 Nix 将 Gleam 项目打包成 AppImage
Source: Dev.to
nix bundle
Nix 有一个方便的(虽然不太稳定的)命令叫 nix bundle。
该命令将 Nix 依赖打包成单个二进制文件,使你能够生成独立的可执行文件。
Example
nix bundle nixpkgs#python314
bundler
通过指定 --bundler 选项,你可以更改打包算法。
例如,使用 github:ralismark/nix-appimage 可以生成一个作为 AppImage 的单二进制文件。
仓库: nix‑appimage
To bundle the aforementioned Python 3.14 as an AppImage
nix bundle --bundler github:ralismark/nix-appimage nixpkgs#python314
AppImage 通过即时自解压仅需要的文件来工作,与传统打包方式相比,提供更快的启动速度。因此,通常推荐使用 AppImage 进行打包。
Bundling Gleam
以前,使用 Gleam 生成单个二进制文件需要像 garnet 这样的工具,这些工具依赖 Deno 和 Bun,并且仅限于 JavaScript 目标。
这里介绍的方法 不 依赖 Gleam 使用的运行时特性,从而也可以将 Erlang 目标转换为单个二进制文件。
这里提供了一个试用版本;运行 nix build 应该会生成单个二进制文件:
该项目使用 gleam2nix 来通过 Nix 构建 Gleam 代码:
Summary
- 使用
nix bundle可以将任何包转换为单个二进制文件。 - 你可以通过
--bundler选项切换打包方式。 - 使用 AppImage 可提供单个二进制文件并拥有快速启动时间。
- 这同样使针对 Erlang 的 Gleam 项目能够生成单个二进制文件。
- 这很方便,但二进制文件大小可能会变得相当大(例如,几百 MB)。