使用指南
组合 Checker 与 Fetcher
从包注册表、Git 或自定义命令选择版本,再独立选择下载方式。
Checker 回答「锁定哪个 Version」,Fetcher 回答「如何获取这个 Version 的内容」。二者不必来自同一个平台。
从 crates.io 获取版本
{ pin }: {
ripgrep = pin.mk {
checker = pin.checker.crate { target = "ripgrep"; };
fetcher = pin.fetcher.zip {
url = version: "https://github.com/BurntSushi/ripgrep/archive/refs/tags/${version}.tar.gz";
};
};
}
这个例子从 crates.io 读取版本,但从 GitHub 的压缩包获取源码。实际使用前应确认注册表版本和仓库 tag 的命名一致。Fetcher 的版本映射不改变 Pins File 中保存的原始 Version。
跟踪 Git 分支
{ pin }: {
project = pin.git {
target = "https://github.com/NixOS/patchelf.git";
mode = "branch";
branch = "master";
};
}
Git 的 head、branch 和 ref 模式返回提交号;tag 模式返回原始 tag。即使分支继续前进,下游仍使用 Pins File 中锁定的提交。
从 npm 获取版本
{ pin }: {
vite = pin.mk {
checker = pin.checker.npm { target = "vite"; distTag = "latest"; };
fetcher = pin.fetcher.url {
url = version: "https://registry.npmjs.org/vite/-/vite-${version}.tgz";
};
};
}
url 保留下载文件,zip 解压支持的归档。选择哪种取决于下游需要文件本身还是源码目录。