SuperAPI AI 工具集

package-npm-nix

部署与运维

查看项目

更新于 10-16 02:14

技能介绍

该技能用于把 npm/TypeScript/Bun 编写的命令行工具打包成 Nix derivation,适合需要将 JavaScript/TypeScript CLI 工具纳入 Nix 生态、追求可复现构建的用户。

用途

面向创建 JavaScript/TypeScript 工具的 Nix 包,来源可以是 npm registry,也可以是 GitHub 源码。技能区分两条路径:已构建并发布到 npm 的工具采用预构建方式(更快、更简单);仅提供源码或 package.json 含构建脚本的工具采用源码构建方式。

主要能力

  • 预构建路径:通过 fetchzip 拉取 npm tarball,在 installPhase 中复制 dist/cli.js 到 $out/bin,设置可执行权限,并用 substituteInPlace 将 shebang 替换为 Nix 商店中的 node 路径。
  • 源码构建路径:通过 fetchFromGitHub 获取源码,使用 fetchBunDeps 固定依赖,构建时复制并修补 node_modules、执行 patchShebangs、autoPatchelf,最后用 bun run build 构建并以 makeBinaryWrapper 封装。
  • 识别包类型:检查 npm 包是否含 dist/ 目录、package.json 的 bin、type、scripts 字段以及运行时要求,据此选择路径。
  • 获取哈希:使用 nix-prefetch-url 获取源码哈希,并用 nix hash convert 转为 SRI 格式;依赖哈希可先填 lib.fakeHash,通过构建报错迭代获得。
  • 创建包结构:建议两文件模式,package.nix 放置完整 derivation,default.nix 通过 pkgs.callPackage 调用,便于独立使用或集成进 flake。
  • 处理特殊情况:复制 WASM 等资源、安装多个可执行文件、针对平台限定(如 Bun 编译产物常为 Linux 专用)。
  • 测试构建:nix build、运行 --version/--help、ldd 检查依赖、nix fmt、nix flake check。

使用方式

按步骤执行:先识别包类型,再获取哈希,随后创建包文件,处理特殊情况,最后测试构建。常见模式包括 shebang 替换(replace-quiet 抑制未匹配警告)、本地依赖处理(autoPatchelfHook、stdenv.cc.cc.lib、autoPatchelfIgnoreMissingDeps)、Bun 编译产物需设置 dontStrip = true、检查 tarball 内容布局。

元数据与规范

每个包需完整 meta:description、homepage、license、sourceProvenance(fromSource / binaryBytecode / binaryNativeCode)、maintainers、mainProgram、platforms。反模式包括硬编码 /usr/bin/node、跳过哈希校验、忘记 chmod +x、剥离 Bun 二进制。

适用场景与限制

适用于把 npm/GitHub 上的 JS/TS CLI 工具封装进 Nix,强调可复现构建、依赖解析与 shebang 正确性。常见问题涵盖哈希不匹配、可执行文件缺失、ELF 解释器错误、bun.lock 不匹配。若仅在 Linux 测试,应保守标注平台或注明其他平台未测试。具体版本、价格、维护状态等资料未提供。