[{"data":1,"prerenderedAt":560},["ShallowReactive",2],{"navigation_docs_zh_CN":3,"\u002Fzh-CN\u002Fguides\u002Fcombinations":85,"\u002Fzh-CN\u002Fguides\u002Fcombinations-surround":555},[4,19,41,75],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":18},"快速开始","i-lucide-book-open","\u002Fzh-CN\u002Fgetting-started","zh-CN\u002F1.getting-started",[10,14],{"title":11,"path":12,"stem":13},"安装","\u002Fzh-CN\u002Fgetting-started\u002Finstallation","zh-CN\u002F1.getting-started\u002F1.installation",{"title":15,"path":16,"stem":17},"第一个 Pin","\u002Fzh-CN\u002Fgetting-started\u002Ffirst-pin","zh-CN\u002F1.getting-started\u002F2.first-pin",false,{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":18},"使用指南","i-lucide-route","\u002Fzh-CN\u002Fguides","zh-CN\u002F2.guides",[25,29,33,37],{"title":26,"path":27,"stem":28},"更新与选择","\u002Fzh-CN\u002Fguides\u002Fupdating","zh-CN\u002F2.guides\u002F1.updating",{"title":30,"path":31,"stem":32},"组合 Checker 与 Fetcher","\u002Fzh-CN\u002Fguides\u002Fcombinations","zh-CN\u002F2.guides\u002F2.combinations",{"title":34,"path":35,"stem":36},"多 Source 与补丁","\u002Fzh-CN\u002Fguides\u002Fmulti-source","zh-CN\u002F2.guides\u002F3.multi-source",{"title":38,"path":39,"stem":40},"Package 与依赖哈希","\u002Fzh-CN\u002Fguides\u002Fdependencies","zh-CN\u002F2.guides\u002F4.dependencies",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":18},"参考文档","i-lucide-code","\u002Fzh-CN\u002Freference","zh-CN\u002F3.reference",[47,51,55,59,63,67,71],{"title":48,"path":49,"stem":50},"CLI","\u002Fzh-CN\u002Freference\u002Fcli","zh-CN\u002F3.reference\u002F1.cli",{"title":52,"path":53,"stem":54},"运行配置","\u002Fzh-CN\u002Freference\u002Fconfiguration","zh-CN\u002F3.reference\u002F2.configuration",{"title":56,"path":57,"stem":58},"Pin 声明","\u002Fzh-CN\u002Freference\u002Fpins","zh-CN\u002F3.reference\u002F3.pins",{"title":60,"path":61,"stem":62},"Checker","\u002Fzh-CN\u002Freference\u002Fcheckers","zh-CN\u002F3.reference\u002F4.checkers",{"title":64,"path":65,"stem":66},"Fetcher","\u002Fzh-CN\u002Freference\u002Ffetchers","zh-CN\u002F3.reference\u002F5.fetchers",{"title":68,"path":69,"stem":70},"Package Builder","\u002Fzh-CN\u002Freference\u002Fbuilders","zh-CN\u002F3.reference\u002F6.builders",{"title":72,"path":73,"stem":74},"Reader 与 Pins File","\u002Fzh-CN\u002Freference\u002Freader","zh-CN\u002F3.reference\u002F7.reader",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":18},"排错指南","i-lucide-wrench","\u002Fzh-CN\u002Ftroubleshooting","zh-CN\u002F4.troubleshooting",[81],{"title":82,"path":83,"stem":84},"常见错误","\u002Fzh-CN\u002Ftroubleshooting\u002Fcommon-errors","zh-CN\u002F4.troubleshooting\u002F1.common-errors",{"id":86,"title":30,"body":87,"description":548,"extension":549,"links":550,"meta":551,"navigation":552,"path":31,"seo":553,"stem":32,"__hash__":554},"docs_zh_CN\u002Fzh-CN\u002F2.guides\u002F2.combinations.md",{"type":88,"value":89,"toc":543},"minimark",[90,94,99,268,271,275,362,380,384,521,529,539],[91,92,93],"p",{},"Checker 回答「锁定哪个 Version」，Fetcher 回答「如何获取这个 Version 的内容」。二者不必来自同一个平台。",[95,96,98],"h2",{"id":97},"从-cratesio-获取版本","从 crates.io 获取版本",[100,101,106],"pre",{"className":102,"code":103,"language":104,"meta":105,"style":105},"language-nix shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ pin }: {\n  ripgrep = pin.mk {\n    checker = pin.checker.crate { target = \"ripgrep\"; };\n    fetcher = pin.fetcher.zip {\n      url = version: \"https:\u002F\u002Fgithub.com\u002FBurntSushi\u002Fripgrep\u002Farchive\u002Frefs\u002Ftags\u002F${version}.tar.gz\";\n    };\n  };\n}\n","nix","",[107,108,109,128,148,192,214,250,256,262],"code",{"__ignoreMap":105},[110,111,114,118,122,125],"span",{"class":112,"line":113},"line",1,[110,115,117],{"class":116},"sMK4o","{",[110,119,121],{"class":120},"sHdIc"," pin",[110,123,124],{"class":116}," }:",[110,126,127],{"class":116}," {\n",[110,129,131,135,138,140,143,146],{"class":112,"line":130},2,[110,132,134],{"class":133},"spNyl","  ripgrep",[110,136,137],{"class":116}," =",[110,139,121],{"class":120},[110,141,142],{"class":116},".",[110,144,145],{"class":120},"mk",[110,147,127],{"class":116},[110,149,151,154,156,158,160,163,165,168,171,174,176,179,183,186,189],{"class":112,"line":150},3,[110,152,153],{"class":133},"    checker",[110,155,137],{"class":116},[110,157,121],{"class":120},[110,159,142],{"class":116},[110,161,162],{"class":120},"checker",[110,164,142],{"class":116},[110,166,167],{"class":120},"crate",[110,169,170],{"class":116}," {",[110,172,173],{"class":133}," target",[110,175,137],{"class":116},[110,177,178],{"class":116}," \"",[110,180,182],{"class":181},"sfazB","ripgrep",[110,184,185],{"class":116},"\"",[110,187,188],{"class":116},";",[110,190,191],{"class":116}," };\n",[110,193,195,198,200,202,204,207,209,212],{"class":112,"line":194},4,[110,196,197],{"class":133},"    fetcher",[110,199,137],{"class":116},[110,201,121],{"class":120},[110,203,142],{"class":116},[110,205,206],{"class":120},"fetcher",[110,208,142],{"class":116},[110,210,211],{"class":120},"zip",[110,213,127],{"class":116},[110,215,217,220,222,225,228,230,233,236,239,242,245,247],{"class":112,"line":216},5,[110,218,219],{"class":133},"      url",[110,221,137],{"class":116},[110,223,224],{"class":120}," version",[110,226,227],{"class":116},":",[110,229,178],{"class":116},[110,231,232],{"class":181},"https:\u002F\u002Fgithub.com\u002FBurntSushi\u002Fripgrep\u002Farchive\u002Frefs\u002Ftags\u002F",[110,234,235],{"class":116},"${",[110,237,238],{"class":120},"version",[110,240,241],{"class":116},"}",[110,243,244],{"class":181},".tar.gz",[110,246,185],{"class":116},[110,248,249],{"class":116},";\n",[110,251,253],{"class":112,"line":252},6,[110,254,255],{"class":116},"    };\n",[110,257,259],{"class":112,"line":258},7,[110,260,261],{"class":116},"  };\n",[110,263,265],{"class":112,"line":264},8,[110,266,267],{"class":116},"}\n",[91,269,270],{},"这个例子从 crates.io 读取版本，但从 GitHub 的压缩包获取源码。实际使用前应确认注册表版本和仓库 tag 的命名一致。Fetcher 的版本映射不改变 Pins File 中保存的原始 Version。",[95,272,274],{"id":273},"跟踪-git-分支","跟踪 Git 分支",[100,276,278],{"className":102,"code":277,"language":104,"meta":105,"style":105},"{ pin }: {\n  project = pin.git {\n    target = \"https:\u002F\u002Fgithub.com\u002FNixOS\u002Fpatchelf.git\";\n    mode = \"branch\";\n    branch = \"master\";\n  };\n}\n",[107,279,280,290,306,322,338,354,358],{"__ignoreMap":105},[110,281,282,284,286,288],{"class":112,"line":113},[110,283,117],{"class":116},[110,285,121],{"class":120},[110,287,124],{"class":116},[110,289,127],{"class":116},[110,291,292,295,297,299,301,304],{"class":112,"line":130},[110,293,294],{"class":133},"  project",[110,296,137],{"class":116},[110,298,121],{"class":120},[110,300,142],{"class":116},[110,302,303],{"class":120},"git",[110,305,127],{"class":116},[110,307,308,311,313,315,318,320],{"class":112,"line":150},[110,309,310],{"class":133},"    target",[110,312,137],{"class":116},[110,314,178],{"class":116},[110,316,317],{"class":181},"https:\u002F\u002Fgithub.com\u002FNixOS\u002Fpatchelf.git",[110,319,185],{"class":116},[110,321,249],{"class":116},[110,323,324,327,329,331,334,336],{"class":112,"line":194},[110,325,326],{"class":133},"    mode",[110,328,137],{"class":116},[110,330,178],{"class":116},[110,332,333],{"class":181},"branch",[110,335,185],{"class":116},[110,337,249],{"class":116},[110,339,340,343,345,347,350,352],{"class":112,"line":216},[110,341,342],{"class":133},"    branch",[110,344,137],{"class":116},[110,346,178],{"class":116},[110,348,349],{"class":181},"master",[110,351,185],{"class":116},[110,353,249],{"class":116},[110,355,356],{"class":112,"line":252},[110,357,261],{"class":116},[110,359,360],{"class":112,"line":258},[110,361,267],{"class":116},[91,363,364,365,368,369,371,372,375,376,379],{},"Git 的 ",[107,366,367],{},"head","、",[107,370,333],{}," 和 ",[107,373,374],{},"ref"," 模式返回提交号；",[107,377,378],{},"tag"," 模式返回原始 tag。即使分支继续前进，下游仍使用 Pins File 中锁定的提交。",[95,381,383],{"id":382},"从-npm-获取版本","从 npm 获取版本",[100,385,387],{"className":102,"code":386,"language":104,"meta":105,"style":105},"{ pin }: {\n  vite = pin.mk {\n    checker = pin.checker.npm { target = \"vite\"; distTag = \"latest\"; };\n    fetcher = pin.fetcher.url {\n      url = version: \"https:\u002F\u002Fregistry.npmjs.org\u002Fvite\u002F-\u002Fvite-${version}.tgz\";\n    };\n  };\n}\n",[107,388,389,399,414,462,481,509,513,517],{"__ignoreMap":105},[110,390,391,393,395,397],{"class":112,"line":113},[110,392,117],{"class":116},[110,394,121],{"class":120},[110,396,124],{"class":116},[110,398,127],{"class":116},[110,400,401,404,406,408,410,412],{"class":112,"line":130},[110,402,403],{"class":133},"  vite",[110,405,137],{"class":116},[110,407,121],{"class":120},[110,409,142],{"class":116},[110,411,145],{"class":120},[110,413,127],{"class":116},[110,415,416,418,420,422,424,426,428,431,433,435,437,439,442,444,446,449,451,453,456,458,460],{"class":112,"line":150},[110,417,153],{"class":133},[110,419,137],{"class":116},[110,421,121],{"class":120},[110,423,142],{"class":116},[110,425,162],{"class":120},[110,427,142],{"class":116},[110,429,430],{"class":120},"npm",[110,432,170],{"class":116},[110,434,173],{"class":133},[110,436,137],{"class":116},[110,438,178],{"class":116},[110,440,441],{"class":181},"vite",[110,443,185],{"class":116},[110,445,188],{"class":116},[110,447,448],{"class":133}," distTag",[110,450,137],{"class":116},[110,452,178],{"class":116},[110,454,455],{"class":181},"latest",[110,457,185],{"class":116},[110,459,188],{"class":116},[110,461,191],{"class":116},[110,463,464,466,468,470,472,474,476,479],{"class":112,"line":194},[110,465,197],{"class":133},[110,467,137],{"class":116},[110,469,121],{"class":120},[110,471,142],{"class":116},[110,473,206],{"class":120},[110,475,142],{"class":116},[110,477,478],{"class":120},"url",[110,480,127],{"class":116},[110,482,483,485,487,489,491,493,496,498,500,502,505,507],{"class":112,"line":216},[110,484,219],{"class":133},[110,486,137],{"class":116},[110,488,224],{"class":120},[110,490,227],{"class":116},[110,492,178],{"class":116},[110,494,495],{"class":181},"https:\u002F\u002Fregistry.npmjs.org\u002Fvite\u002F-\u002Fvite-",[110,497,235],{"class":116},[110,499,238],{"class":120},[110,501,241],{"class":116},[110,503,504],{"class":181},".tgz",[110,506,185],{"class":116},[110,508,249],{"class":116},[110,510,511],{"class":112,"line":252},[110,512,255],{"class":116},[110,514,515],{"class":112,"line":258},[110,516,261],{"class":116},[110,518,519],{"class":112,"line":264},[110,520,267],{"class":116},[91,522,523,525,526,528],{},[107,524,478],{}," 保留下载文件，",[107,527,211],{}," 解压支持的归档。选择哪种取决于下游需要文件本身还是源码目录。",[91,530,531,532,535,536,538],{},"所有内置选项分别见 ",[533,534,60],"a",{"href":61},"和 ",[533,537,64],{"href":65},"。",[540,541,542],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":105,"searchDepth":130,"depth":130,"links":544},[545,546,547],{"id":97,"depth":130,"text":98},{"id":273,"depth":130,"text":274},{"id":382,"depth":130,"text":383},"从包注册表、Git 或自定义命令选择版本，再独立选择下载方式。","md",null,{},true,{"title":30,"description":548},"rPKGbpGyp9x9zOlUPJFAWGJiv_IRv8IQEvc0UbnjtXM",[556,558],{"title":26,"path":27,"stem":28,"description":557,"children":-1},"理解全部更新、选择性更新、失败保留和取消行为。",{"title":34,"path":35,"stem":36,"description":559,"children":-1},"用一个 Version 锁定多个具名来源，并给各来源配置独立的补丁和 Package。",1790868073520]