mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-22 00:05:37 +08:00
153 lines
84 KiB
HTML
153 lines
84 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Artifact 模型 | StaticPHP</title>
|
||
<meta name="description" content="A powerful tool designed for building portable executables including PHP, extensions, and more.">
|
||
<meta name="generator" content="VitePress v2.0.0-alpha.18">
|
||
<link rel="preload stylesheet" href="/assets/style.C4OPn_QV.css" as="style">
|
||
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
|
||
|
||
<script type="module" src="/assets/app.Bw02Lh2k.js"></script>
|
||
<link rel="preload" href="/assets/inter-roman-latin.Cy4MYw_J.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.C_odZu9O.js">
|
||
<link rel="modulepreload" href="/assets/chunks/framework.DrNIf5Lg.js">
|
||
<link rel="modulepreload" href="/assets/zh_develop_artifact-model.md.CrLRSeeY.lean.js">
|
||
<script id="check-dark-mode">(()=>{let e=localStorage.getItem(`vitepress-theme-appearance`)||`auto`,t=window.matchMedia(`(prefers-color-scheme: dark)`).matches;(!e||e===`auto`?t:e===`dark`)&&document.documentElement.classList.add(`dark`)})();</script>
|
||
<script id="check-mac-os">document.documentElement.classList.toggle(`mac`,/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-0cf61682><!--[--><!--]--><!--[--><span tabindex="-1" data-v-414181b2></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-414181b2>Skip to content</a><!--]--><!----><header class="VPNav" data-v-0cf61682 data-v-9f75dce3><div class="VPNavBar has-sidebar top" data-v-9f75dce3 data-v-9ca1369d><div class="wrapper" data-v-9ca1369d><div class="container" data-v-9ca1369d><div class="title" data-v-9ca1369d><div class="VPNavBarTitle has-sidebar" data-v-9ca1369d data-v-1e38c6bc><a class="title" href="/zh/" data-v-1e38c6bc><!--[--><!--]--><!--[--><img class="VPImage logo" src="/images/static-php_nobg.png" alt data-v-8426fc1a><!--]--><span data-v-1e38c6bc>StaticPHP</span><!--[--><!--]--></a></div></div><div class="content" data-v-9ca1369d><div class="content-body" data-v-9ca1369d><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9ca1369d data-v-2fc7f2c6><!--[--><button type="button" class="VPNavBarSearchButton" aria-label="Search" aria-keyshortcuts="/ control+k meta+k" data-v-2fc7f2c6 data-v-baa3be99><span class="vpi-search" aria-hidden="true" data-v-baa3be99></span><span class="text" data-v-baa3be99>Search</span><span class="keys" aria-hidden="true" data-v-baa3be99><kbd class="key-cmd" data-v-baa3be99>⌘</kbd><kbd class="key-ctrl" data-v-baa3be99>Ctrl</kbd><kbd data-v-baa3be99>K</kbd></span></button><button type="button" class="VPNavBarAskAiButton" aria-label="Ask AI" aria-keyshortcuts="control+i meta+i" data-v-2fc7f2c6 data-v-4eb17e89><span class="vpi-sparkles" aria-hidden="true" data-v-4eb17e89></span></button><!----><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9ca1369d data-v-7b3e138d><span id="main-nav-aria-label" class="visually-hidden" data-v-7b3e138d> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/guide/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>构建指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/develop/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>开发者</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/contributing/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>贡献</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/faq/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>FAQ</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7b3e138d data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-42cb505d><span class="text" data-v-42cb505d><!----><span data-v-42cb505d>v3 (alpha)</span><span class="vpi-chevron-down text-icon" data-v-42cb505d></span></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><div class="items" data-v-25a6cce8><!--[--><!--[--><div class="VPMenuLink" data-v-25a6cce8 data-v-fff73daa><a class="VPLink link" href="/zh/" data-v-fff73daa><!--[--><span data-v-fff73daa>v3 (alpha)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-25a6cce8 data-v-fff73daa><a class="VPLink link" href="https://static-php.github.io/v2-docs/" data-v-fff73daa><!--[--><span data-v-fff73daa>v2</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-9ca1369d data-v-c70a0580 data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-42cb505d><span class="text" data-v-42cb505d><span class="vpi-languages option-icon" data-v-42cb505d></span><!----><span class="vpi-chevron-down text-icon" data-v-42cb505d></span></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><!----><!--[--><!--[--><div class="items" data-v-c70a0580><p class="title" data-v-c70a0580>简体中文</p><!--[--><div class="VPMenuLink" data-v-c70a0580 data-v-fff73daa><a class="VPLink link" href="/en/develop/artifact-model.html" rel="alternate" lang="en" hreflang="en" data-v-fff73daa><!--[--><span data-v-fff73daa>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-9ca1369d data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9ca1369d data-v-0394ad82 data-v-aab4b505><!--[--><a class="VPSocialLink no-icon" href="https://github.com/crazywhalecc/static-php-cli" aria-label="github" target="_blank" rel="me noopener" data-v-aab4b505 data-v-b2b39822><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9ca1369d data-v-f9c1cef3 data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-42cb505d><span class="vpi-more-horizontal icon" data-v-42cb505d></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><!----><!--[--><!--[--><div class="group translations" data-v-f9c1cef3><p class="trans-title" data-v-f9c1cef3>简体中文</p><!--[--><div class="VPMenuLink" data-v-f9c1cef3 data-v-fff73daa><a class="VPLink link" href="/en/develop/artifact-model.html" rel="alternate" lang="en" hreflang="en" data-v-fff73daa><!--[--><span data-v-fff73daa>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-f9c1cef3><div class="item appearance" data-v-f9c1cef3><p class="label" data-v-f9c1cef3>Appearance</p><div class="appearance-action" data-v-f9c1cef3><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f9c1cef3 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f9c1cef3><div class="item social-links" data-v-f9c1cef3><div class="VPSocialLinks social-links-list" data-v-f9c1cef3 data-v-aab4b505><!--[--><a class="VPSocialLink no-icon" href="https://github.com/crazywhalecc/static-php-cli" aria-label="github" target="_blank" rel="me noopener" data-v-aab4b505 data-v-b2b39822><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9ca1369d data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-9ca1369d><div class="divider-line" data-v-9ca1369d></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-0cf61682 data-v-db738f89><div class="container" data-v-db738f89><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-db738f89><span class="vpi-align-left menu-icon" data-v-db738f89></span><span class="menu-text" data-v-db738f89>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-db738f89 data-v-0bf0e06f><button data-v-0bf0e06f>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-0cf61682 data-v-af661f50><div class="curtain" data-v-af661f50></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-af661f50><span class="visually-hidden" id="sidebar-aria-label" data-v-af661f50> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>概览</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>开发简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/structure.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>项目结构</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0 has-active" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>配置参考</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/registry.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Registry</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/package-model.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Package 模型</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/artifact-model.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Artifact 模型</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/craft-yml.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>craft.yml 配置</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>构建系统</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/build-lifecycle.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>构建生命周期</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/system-build-tools.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>编译工具</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/doctor-module.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Doctor 环境检查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/php-src-changes.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>对 PHP 源码的修改</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>扩展 StaticPHP</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/extending/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/extending/package-classes.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>编写 Package 类</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/extending/annotations.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>注解参考</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/extending/lifecycle-hooks.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>生命周期 Hook</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/extending/dependency-injection.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>依赖注入</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/zh/develop/extending/custom-artifact.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>自定义 Artifact</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-0cf61682 data-v-7948e71f><div class="VPDoc has-sidebar has-aside" data-v-7948e71f data-v-7011f0d8><!--[--><!--]--><div class="container" data-v-7011f0d8><div class="aside" data-v-7011f0d8><div class="aside-curtain" data-v-7011f0d8></div><div class="aside-container" data-v-7011f0d8><div class="aside-content" data-v-7011f0d8><div class="VPDocAside" data-v-7011f0d8 data-v-62132652><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-62132652 data-v-208c587c><div class="content" data-v-208c587c><div class="outline-marker" data-v-208c587c></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-208c587c>On this page</div><ul class="VPDocOutlineItem root" data-v-208c587c data-v-1ce71065><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-62132652></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-7011f0d8><div class="content-container" data-v-7011f0d8><!--[--><!--]--><main class="main" data-v-7011f0d8><div style="position:relative;" class="vp-doc _zh_develop_artifact-model external-link-icon-enabled" data-v-7011f0d8><div><h1 id="artifact-模型" tabindex="-1">Artifact 模型 <a class="header-anchor" href="#artifact-模型" aria-label="Permalink to “Artifact 模型”"></a></h1><p>Artifact 是 StaticPHP 构建系统中的一个重要概念,代表构建包所需的源码归档文件或预构建的二进制文件。每个 Artifact 定义了下载 URL、解压方式、构建产物的文件路径等信息。Package 可以通过 <code>artifact</code> 字段引用一个或多个 Artifact 来获取构建所需的源码或二进制文件。</p><h2 id="artifact-定义" tabindex="-1">Artifact 定义 <a class="header-anchor" href="#artifact-定义" aria-label="Permalink to “Artifact 定义”"></a></h2><p>下面是一个简单的包含源码的 artifact 单元对象示例(curl 源码):</p><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ghrel</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">curl/curl</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> match</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">curl.+\.tar\.xz</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> prefer-stable</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span></code></pre></div><p>有两种方式定义一个 artifact 并关联到 package,一种是独立定义 artifact(如上),另一种是直接在 package 定义中内联 artifact:</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-16" id="tab-17" checked><label data-title="内联 Artifact 定义示例" for="tab-17">内联 Artifact 定义示例</label><input type="radio" name="group-16" id="tab-18"><label data-title="独立 Artifact 定义示例" for="tab-18">独立 Artifact 定义示例</label><input type="radio" name="group-16" id="tab-19"><label data-title="Package 引用独立 Artifact 示例" for="tab-19">Package 引用独立 Artifact 示例</label></div><div class="blocks"><div class="language-yaml active"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># 该文件为 package 声明</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">curl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">target</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ghrel</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">curl/curl</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> match</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">curl.+\.tar\.xz</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> prefer-stable</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span></code></pre></div><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># 该文件为 artifact 声明,通常位于 config/artifact/ 目录</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">curl-src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ghrel</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">curl/curl</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> match</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">curl.+\.tar\.xz</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> prefer-stable</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span></code></pre></div><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># 该文件为 package 声明</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">curl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">target</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">curl-src</span></span></code></pre></div></div></div><h2 id="类型" tabindex="-1">类型 <a class="header-anchor" href="#类型" aria-label="Permalink to “类型”"></a></h2><p>Artifact 包含 <code>source</code>、<code>binary</code> 和 <code>metadata</code> 三个部分。</p><p>其中,<code>source</code> 代表源码,<code>binary</code> 代表预构建的二进制文件,<code>metadata</code> 则包含一些额外的信息(如许可证文件路径等)。<code>source</code> 和 <code>binary</code> 都支持直接定义下载 URL 的方式,也支持引用同名 Artifact 定义的方式(如上例所示)。</p><p>下面是一个 artifact 配置的对象格式</p><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">source-object</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># (optional)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> binary</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> windows-x86_64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">source-object</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># (optional)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> linux-x86_64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">source-object</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># (optional)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> linux-aarch64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">source-object</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># (optional)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> macos-x86_64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">source-object</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># (optional)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> macos-aarch64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">source-object</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># (optional)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> metadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># (optional)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> license</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">""</span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> # (optional) SPDX</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> license-files</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"LICENSE"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">] </span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># License files from original source dir</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source-root</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"subdir"</span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> # (optional) If package source is in subdir, use this to change base</span></span></code></pre></div><p>下面是 <code>source-object</code> 的基本格式:</p><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"url"</span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> # Download type</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> # ...: Different type requires differnt keys here, read below</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> extract</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"path/to/dir"</span><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> # (optional) Change extract dir, default: `SOURCE_PATH/{artifact-name}`</span></span></code></pre></div><h2 id="metadata" tabindex="-1">Metadata <a class="header-anchor" href="#metadata" aria-label="Permalink to “Metadata”"></a></h2><p><code>metadata</code> 字段用于声明 Artifact 的附加信息,目前支持以下三个子字段:</p><h3 id="license" tabindex="-1">license <a class="header-anchor" href="#license" aria-label="Permalink to “license”"></a></h3><ul><li><strong>类型</strong>:<code>string</code>(选填)</li><li><strong>说明</strong>:该包的开源协议标识符,遵循 <a href="https://spdx.org/licenses/" target="_blank" rel="noreferrer">SPDX License Identifier</a> 规范(如 <code>MIT</code>、<code>Apache-2.0</code>、<code>GPL-2.0-only</code>)。仅用于在构建产物的 License 汇总中标注协议类型,不影响构建逻辑。</li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">metadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> license</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">MIT</span></span></code></pre></div><h3 id="license-files" tabindex="-1">license-files <a class="header-anchor" href="#license-files" aria-label="Permalink to “license-files”"></a></h3><ul><li><strong>类型</strong>:<code>string[]</code>(选填)</li><li><strong>说明</strong>:License 文件的路径列表。构建完成后,框架会自动将这些文件收集到构建产物的 <code>license/</code> 目录中。路径支持两种写法: <ul><li><strong>相对路径</strong>(如 <code>LICENSE</code>、<code>COPYING</code>、<code>gettext-runtime/intl/COPYING.LIB</code>):相对于该 Artifact 的源码根目录解析。</li><li><strong><code>@/</code> 前缀路径</strong>(如 <code>@/bzip2.txt</code>):表示框架内置的 License 文件,路径解析为 <code>src/globals/licenses/</code> 目录下的文件。适用于源码包本身不附带 License 文件(或 License 文本嵌入在其他文档中)的场景,此时可将 License 文本预先放入框架内置目录并通过 <code>@/</code> 引用。</li></ul></li></ul><p>目前框架内置的 License 文件有:<code>bzip2.txt</code>、<code>gmp.txt</code>、<code>icu.txt</code>、<code>postgresql.txt</code>、<code>sqlite.txt</code>、<code>zlib.txt</code>。</p><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># 常见用法:从源码目录读取</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">metadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> license-files</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">LICENSE</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># 多个 License 文件</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">metadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> license-files</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">LICENSE</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">COPYING.LESSER</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># 子目录中的 License 文件</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">metadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> license-files</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">gettext-runtime/intl/COPYING.LIB</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># 使用框架内置 License(源码包不含 License 文件时)</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">metadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> license-files</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@/bzip2.txt'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div><h3 id="source-root" tabindex="-1">source-root <a class="header-anchor" href="#source-root" aria-label="Permalink to “source-root”"></a></h3><ul><li><strong>类型</strong>:<code>string</code>(选填)</li><li><strong>说明</strong>:当 Artifact 解压后,实际的源码根目录位于解压目录的子目录中时,使用该字段指定子目录名。框架在执行构建时会将工作目录切换到该子目录,而非解压后的顶层目录。</li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># krb5 的源码解压后实际根目录在 src/ 子目录下</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">metadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source-root</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">src</span></span></code></pre></div><h2 id="下载来源" tabindex="-1">下载来源 <a class="header-anchor" href="#下载来源" aria-label="Permalink to “下载来源”"></a></h2><p>Artifact 支持多种下载来源类型。你可以根据实际情况选择对应包的下载来源。</p><table tabindex="0"><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>url</code></td><td>直接下载固定 URL,支持 <code>filename</code>(自定义本地文件名)和 <code>version</code>(手动指定版本号)字段</td></tr><tr><td><code>git</code></td><td>从 Git 仓库克隆源码,支持 <code>rev</code>(分支/标签/commit)、<code>submodules</code>(是否拉取子模块)、<code>extract</code>(解压目标路径)等字段</td></tr><tr><td><code>ghrel</code></td><td>从 GitHub Release 的 Assets 中按正则匹配下载,必填 <code>repo</code>(<code>owner/repo</code> 格式)和 <code>match</code>(文件名正则),支持 <code>prefer-stable</code>(优先稳定版)</td></tr><tr><td><code>ghtar</code></td><td>从 GitHub Release 下载源码 tarball(<code>/releases</code> API),按 <code>match</code> 正则匹配 Release 名称,支持 <code>prefer-stable</code></td></tr><tr><td><code>ghtagtar</code></td><td>从 GitHub Tag 下载源码 tarball(<code>/tags</code> API),按 <code>match</code> 正则匹配 Tag 名称,支持 <code>prefer-stable</code></td></tr><tr><td><code>filelist</code></td><td>抓取指定页面的 HTML,用 <code>regex</code> 从中提取文件名和版本号,再拼接 <code>url</code> 下载,适用于有版本列表页的官方站点(如 php.net、openssl.org)</td></tr><tr><td><code>pecl</code></td><td>从 PECL(pecl.php.net)下载 PHP 扩展,指定 <code>name</code>(扩展包名),支持 <code>prefer-stable</code></td></tr><tr><td><code>pie</code></td><td>从 Packagist(repo.packagist.org)下载 PHP 扩展,指定 <code>repo</code>(<code>vendor/package</code> 格式),通过 Composer dist 获取下载链接</td></tr><tr><td><code>php-release</code></td><td>从 php.net 官方下载 PHP 源码,由 <code>domain</code> 指定镜像域名,版本由构建时的 <code>--with-php</code> 参数决定</td></tr><tr><td><code>bitbuckettag</code></td><td>从 Bitbucket Tag 下载源码 tarball,指定 <code>repo</code>(<code>workspace/repo</code> 格式),自动获取最新 Tag</td></tr><tr><td><code>local</code></td><td>使用本地已有目录作为源码,指定 <code>dirname</code>(本地目录路径),适用于预先放置好源码的场景</td></tr><tr><td><code>custom</code></td><td>自定义下载逻辑,由 <code>src/Package/Artifact/</code> 下对应的 PHP 类实现,可指定 <code>func</code> 调用类中的特定方法</td></tr></tbody></table><h2 id="下载来源详情" tabindex="-1">下载来源详情 <a class="header-anchor" href="#下载来源详情" aria-label="Permalink to “下载来源详情”"></a></h2><h3 id="url" tabindex="-1">url <a class="header-anchor" href="#url" aria-label="Permalink to “url”"></a></h3><p>直接从固定 URL 下载文件。下载完成后自动解压到指定目录。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\Url</code></li><li><strong>支持能力</strong>:仅基础下载,不支持自动检查版本更新</li><li><strong>必填</strong>:<code>url</code> — 下载地址</li><li><strong>选填</strong>: <ul><li><code>filename</code> — 保存到本地的文件名(默认取 URL 末段路径)</li><li><code>version</code> — 手动指定版本号(该类型无法自动检测版本)</li><li><code>extract</code> — 解压目标目录(默认为 <code>SOURCE_PATH/{artifact-name}</code>)</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># sqlite 使用固定 URL 下载</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">url</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> url</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'https://www.sqlite.org/2024/sqlite-autoconf-3450200.tar.gz'</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title custom-block-title-default">TIP</p><p>在 artifact 中,以 <code>http://</code> 或 <code>https://</code> 开头的字符串会自动扩展为 <code>type: url</code> 对象,因此大多数情况下可以直接写裸 URL 字符串。</p><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'https://www.sqlite.org/2024/sqlite-autoconf-3450200.tar.gz'</span></span></code></pre></div></div><hr><h3 id="git" tabindex="-1">git <a class="header-anchor" href="#git" aria-label="Permalink to “git”"></a></h3><p>从 Git 仓库克隆源码。支持两种模式:指定固定分支/Tag/commit(<code>rev</code>),或通过正则从所有分支中匹配版本号(<code>regex</code>)。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\Git</code></li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)</li><li><strong>必填</strong>:<code>url</code> — 仓库地址</li><li><strong>选填</strong>(<code>rev</code> 和 <code>regex</code> 至少填一个): <ul><li><code>rev</code> — 直接克隆指定分支、Tag 或 commit hash</li><li><code>regex</code> — 对所有远程分支名执行正则匹配,自动选取版本最高的分支(需包含命名捕获组 <code>(?P<version>...)</code>)</li><li><code>submodules</code> — 是否拉取 git submodule(布尔值)</li><li><code>extract</code> — 克隆目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># php-glfw 使用 git 克隆 master 分支</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">git</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> url</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'https://github.com/mario-deluna/php-glfw'</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> rev</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">master</span></span></code></pre></div><hr><h3 id="ghrel" tabindex="-1">ghrel <a class="header-anchor" href="#ghrel" aria-label="Permalink to “ghrel”"></a></h3><p>通过 GitHub Release Assets API 下载文件。适合仓库在 Release 页面上传了预编译包或源码压缩包的情况。需要指定文件名正则来匹配 Assets 中的目标文件。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\GitHubRelease</code></li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)、下载完整性校验(<code>ValidatorInterface</code>,校验 SHA256)</li><li><strong>必填</strong>: <ul><li><code>repo</code> — 仓库路径,格式 <code>owner/repo</code></li><li><code>match</code> — 匹配 Asset 文件名的正则(不含分隔符,如 <code>openssl.+\.tar\.gz</code>)</li></ul></li><li><strong>选填</strong>: <ul><li><code>prefer-stable</code> — 是否跳过预发布版本(默认 <code>true</code>)</li><li><code>query</code> — 附加到 API URL 末尾的查询字符串(如 <code>?per_page=5</code>)</li><li><code>extract</code> — 解压目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># openssl 从 GitHub Release Assets 下载</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ghrel</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">openssl/openssl</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> match</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">openssl.+\.tar\.gz</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> prefer-stable</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span></code></pre></div><hr><h3 id="ghtar" tabindex="-1">ghtar <a class="header-anchor" href="#ghtar" aria-label="Permalink to “ghtar”"></a></h3><p>通过 GitHub <strong>Releases</strong> API 下载源码 tarball(即 Release 页面中的 Source code 包)。与 <code>ghrel</code> 的区别在于:<code>ghrel</code> 下载 Assets,<code>ghtar</code> 下载 Release 自动生成的源码 tarball。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\GitHubTarball</code></li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)</li><li><strong>必填</strong>:<code>repo</code> — 仓库路径,格式 <code>owner/repo</code></li><li><strong>选填</strong>: <ul><li><code>prefer-stable</code> — 是否跳过预发布版本(默认 <code>true</code>)</li><li><code>match</code> — 对 <code>tarball_url</code> 进行正则过滤(不填则取第一个)</li><li><code>query</code> — 附加到 API URL 末尾的查询字符串</li><li><code>extract</code> — 解压目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># librdkafka 从 GitHub Release tarball 下载</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ghtar</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">confluentinc/librdkafka</span></span></code></pre></div><hr><h3 id="ghtagtar" tabindex="-1">ghtagtar <a class="header-anchor" href="#ghtagtar" aria-label="Permalink to “ghtagtar”"></a></h3><p>通过 GitHub <strong>Tags</strong> API 下载源码 tarball。与 <code>ghtar</code> 用法相同,区别仅在于使用 <code>/tags</code> 接口而非 <code>/releases</code> 接口,适合只打 Tag 而不发布 Release 的仓库。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\GitHubTarball</code>(与 <code>ghtar</code> 共用同一实现类)</li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)</li><li><strong>必填</strong>:<code>repo</code> — 仓库路径,格式 <code>owner/repo</code></li><li><strong>选填</strong>: <ul><li><code>prefer-stable</code> — 是否跳过预发布版本(默认 <code>true</code>)</li><li><code>match</code> — 对 Tag 名称进行正则过滤(不填则取最新 Tag)</li><li><code>query</code> — 附加到 API URL 末尾的查询字符串</li><li><code>extract</code> — 解压目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># brotli 通过 Tag 下载,只匹配 v1.x 系列</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ghtagtar</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">google/brotli</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> match</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'v1\.\d.*'</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># libpng 通过 Tag 下载,匹配 v1.6.x,并增加分页参数</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ghtagtar</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">pnggroup/libpng</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> match</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">v1\.6\.\d+</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> query</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'?per_page=150'</span></span></code></pre></div><hr><h3 id="filelist" tabindex="-1">filelist <a class="header-anchor" href="#filelist" aria-label="Permalink to “filelist”"></a></h3><p>抓取一个 HTML 页面(通常是官方下载列表页),用正则从页面内容中提取文件名和版本号,然后自动选择最高稳定版本进行下载。预发布版本(含 alpha/beta/rc/dev/nightly/snapshot 关键词)会被自动跳过。</p><p><strong>适用场景</strong>:无 GitHub、只有官网下载索引页的开源项目,如 <code>https://ftp.gnu.org/pub/gnu/ncurses/</code>。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\FileList</code></li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)</li><li><strong>必填</strong>: <ul><li><code>url</code> — 包含文件列表的 HTML 页面地址</li><li><code>regex</code> — 用于从页面中提取文件名和版本号的 PCRE 正则(需包含命名捕获组 <code>(?<file>...)</code> 和 <code>(?<version>...)</code>)</li></ul></li><li><strong>选填</strong>: <ul><li><code>extract</code> — 解压目标目录</li><li><code>download-url</code> — 自定义下载 URL 模板,支持 <code>{file}</code> 和 <code>{version}</code> 占位符(默认直接拼接 <code>url</code> + 文件名)</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># ncurses 从 GNU FTP 列表页抓取最新版本</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">filelist</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> url</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'https://ftp.gnu.org/pub/gnu/ncurses/'</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> regex</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'/href="(?<file>ncurses-(?<version>[^"]+)\.tar\.gz)"/'</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># openssl 镜像源同样使用 filelist</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source-mirror</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">filelist</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> url</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'https://www.openssl.org/source/'</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> regex</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'/href="(?<file>openssl-(?<version>[^"]+)\.tar\.gz)"/'</span></span></code></pre></div><hr><h3 id="pecl" tabindex="-1">pecl <a class="header-anchor" href="#pecl" aria-label="Permalink to “pecl”"></a></h3><p>从 <a href="https://pecl.php.net" target="_blank" rel="noreferrer">PECL</a>(PHP 扩展库)下载 PHP 扩展源码包。通过 PECL REST API 获取版本列表,自动选取最新稳定版。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\PECL</code></li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)</li><li><strong>必填</strong>:<code>name</code> — PECL 包名(大小写不敏感,如 <code>APCu</code>)</li><li><strong>选填</strong>: <ul><li><code>prefer-stable</code> — 是否只下载稳定版(默认 <code>true</code>)</li><li><code>extract</code> — 解压目标目录(默认解压到 <code>php-src/ext/{name}</code>)</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># APCu 从 PECL 下载</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">pecl</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">APCu</span></span></code></pre></div><hr><h3 id="pie" tabindex="-1">pie <a class="header-anchor" href="#pie" aria-label="Permalink to “pie”"></a></h3><p>从 <a href="https://repo.packagist.org" target="_blank" rel="noreferrer">Packagist</a> 下载符合 <a href="https://github.com/php/pie" target="_blank" rel="noreferrer">PIE</a> 规范的 PHP 扩展包。通过 Packagist 的 <code>p2/</code> API 获取包信息,并从 <code>dist</code> 字段下载源码。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\PIE</code></li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)</li><li><strong>必填</strong>:<code>repo</code> — Packagist 包路径,格式 <code>vendor/package</code></li><li><strong>选填</strong>: <ul><li><code>extract</code> — 解压目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># xdebug 从 Packagist 下载</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">pie</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">xdebug/xdebug</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># php-spx 指定自定义解压目录</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">pie</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">noisebynorthwest/php-spx</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> extract</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">php-src/ext/spx</span></span></code></pre></div><hr><h3 id="php-release" tabindex="-1">php-release <a class="header-anchor" href="#php-release" aria-label="Permalink to “php-release”"></a></h3><p>从 <a href="https://www.php.net" target="_blank" rel="noreferrer">php.net</a> 官方下载 PHP 源码。版本号由构建时传入的 <code>--with-php</code> 参数决定,并会自动校验 SHA256 完整性。支持传入 <code>git</code> 作为版本号以直接克隆 <code>php/php-src</code> 的 master 分支。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\PhpRelease</code></li><li><strong>支持能力</strong>:检查版本更新(<code>CheckUpdateInterface</code>)、下载完整性校验(<code>ValidatorInterface</code>,校验 SHA256)</li><li><strong>必填</strong>:<code>domain</code> — 下载镜像域名(如 <code>https://www.php.net</code> 或自定义镜像)</li><li><strong>选填</strong>: <ul><li><code>extract</code> — 解压目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"># php-src 官方下载,同时配置镜像</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">php-release</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> domain</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'https://www.php.net'</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source-mirror</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">php-release</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> domain</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'https://phpmirror.static-php.dev'</span></span></code></pre></div><hr><h3 id="bitbuckettag" tabindex="-1">bitbuckettag <a class="header-anchor" href="#bitbuckettag" aria-label="Permalink to “bitbuckettag”"></a></h3><p>从 Bitbucket 仓库的最新 Tag 下载源码 tarball。通过 Bitbucket REST API 获取 Tag 列表,取第一条(即最新 Tag)进行下载。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\BitBucketTag</code></li><li><strong>支持能力</strong>:仅基础下载,不支持自动检查版本更新</li><li><strong>必填</strong>:<code>repo</code> — 仓库路径,格式 <code>workspace/repo</code></li><li><strong>选填</strong>: <ul><li><code>extract</code> — 解压目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">bitbuckettag</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">snappy-m-o/php-snappy</span></span></code></pre></div><hr><h3 id="local" tabindex="-1">local <a class="header-anchor" href="#local" aria-label="Permalink to “local”"></a></h3><p>直接使用本地已有目录作为源码,不执行任何下载操作。适用于源码已预先放置到本地的场景(如离线环境、本地开发调试)。</p><ul><li><strong>实现类</strong>:<code>StaticPHP\Artifact\Downloader\Type\LocalDir</code></li><li><strong>支持能力</strong>:仅基础下载,不支持自动检查版本更新</li><li><strong>必填</strong>:<code>dirname</code> — 本地目录绝对路径</li><li><strong>选填</strong>: <ul><li><code>extract</code> — 解压目标目录</li></ul></li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">local</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> dirname</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/path/to/local/source</span></span></code></pre></div><hr><h3 id="custom" tabindex="-1">custom <a class="header-anchor" href="#custom" aria-label="Permalink to “custom”"></a></h3><p>完全自定义的下载逻辑,由 <code>src/Package/Artifact/</code> 目录下对应的 PHP 类实现。如果不指定 <code>func</code>,则调用类的默认下载方法。</p><ul><li><strong>选填</strong>:<code>func</code> — 调用实现类中的指定方法名</li></ul><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;">artifact</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> source</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#11782a;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">custom</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-7011f0d8 data-v-e29034c6><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e29034c6><span class="visually-hidden" id="doc-footer-aria-label" data-v-e29034c6>Pager</span><div class="pager" data-v-e29034c6><a class="VPLink link pager-link prev" href="/zh/develop/package-model.html" data-v-e29034c6><!--[--><span class="desc" data-v-e29034c6>Previous page</span><span class="title" data-v-e29034c6>Package 模型</span><!--]--></a></div><div class="pager" data-v-e29034c6><a class="VPLink link pager-link next" href="/zh/develop/craft-yml.html" data-v-e29034c6><!--[--><span class="desc" data-v-e29034c6>Next page</span><span class="title" data-v-e29034c6>craft.yml 配置</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-0cf61682 data-v-c3855bb3><div class="container" data-v-c3855bb3><p class="message" data-v-c3855bb3>Released under the MIT License.</p><p class="copyright" data-v-c3855bb3>Copyright © 2023-present crazywhalecc</p></div></footer><!--[--><!--]--></div></div>
|
||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"deps-craft-yml.md\":\"BlUAUDy4\",\"en_contributing_index.md\":\"DJrK0rwl\",\"en_develop_artifact-model.md\":\"CSsy1IGq\",\"en_develop_build-lifecycle.md\":\"DAZqcB7z\",\"en_develop_craft-yml.md\":\"KSoZofRA\",\"en_develop_doctor-module.md\":\"ByvES-_A\",\"en_develop_extending_annotations.md\":\"UKL7B7B3\",\"en_develop_extending_custom-artifact.md\":\"DotD8ITd\",\"en_develop_extending_dependency-injection.md\":\"CyyHOkvH\",\"en_develop_extending_index.md\":\"B2xj8d9p\",\"en_develop_extending_lifecycle-hooks.md\":\"6uwWcfAD\",\"en_develop_extending_package-classes.md\":\"y3Xf7UZ4\",\"en_develop_index.md\":\"BITZJqcR\",\"en_develop_package-model.md\":\"CMZBu01x\",\"en_develop_php-src-changes.md\":\"Cc0fC8cE\",\"en_develop_registry.md\":\"BsjJNDQv\",\"en_develop_structure.md\":\"D8gP8oQJ\",\"en_develop_system-build-tools.md\":\"CUw5wQ4E\",\"en_faq_index.md\":\"BvIAh2aW\",\"en_guide_cli-generator.md\":\"C6SB8xhE\",\"en_guide_cli-reference.md\":\"D7EY77fp\",\"en_guide_deps-map.md\":\"DKgvqXtD\",\"en_guide_env-vars.md\":\"BgjYKJG9\",\"en_guide_extension-notes.md\":\"B3shjkUU\",\"en_guide_extensions.md\":\"ATwZq3HB\",\"en_guide_first-build.md\":\"INdBGOsG\",\"en_guide_index.md\":\"z0D1Gcrs\",\"en_guide_installation.md\":\"BV9Ks-lX\",\"en_guide_migrate-from-v2.md\":\"CUFkYufx\",\"en_guide_sapi-reference.md\":\"p2zEyiLe\",\"en_guide_troubleshooting.md\":\"DVi8H9ZX\",\"en_index.md\":\"D-9tNbNs\",\"index.md\":\"TfAAAF_x\",\"zh_contributing_index.md\":\"8SUl40-w\",\"zh_develop_artifact-model.md\":\"CrLRSeeY\",\"zh_develop_build-lifecycle.md\":\"DLh_YUAK\",\"zh_develop_craft-yml.md\":\"uyL3P4FG\",\"zh_develop_doctor-module.md\":\"B-KVjOyS\",\"zh_develop_extending_annotations.md\":\"Dcz6J_X-\",\"zh_develop_extending_custom-artifact.md\":\"BoYCxDEr\",\"zh_develop_extending_dependency-injection.md\":\"BKeBJfDY\",\"zh_develop_extending_index.md\":\"B7wWMbKy\",\"zh_develop_extending_lifecycle-hooks.md\":\"CG51Rugr\",\"zh_develop_extending_package-classes.md\":\"DBU2hT9_\",\"zh_develop_index.md\":\"CrUwzvi2\",\"zh_develop_package-model.md\":\"DDw9ZCCd\",\"zh_develop_php-src-changes.md\":\"artDuYna\",\"zh_develop_registry.md\":\"ChqnXzVM\",\"zh_develop_structure.md\":\"BivWsi6C\",\"zh_develop_system-build-tools.md\":\"BLdfbezU\",\"zh_faq_index.md\":\"ypwV8ySx\",\"zh_guide_cli-generator.md\":\"BuKsNlwB\",\"zh_guide_cli-reference.md\":\"LVzdkmu2\",\"zh_guide_deps-map.md\":\"9-QWHshB\",\"zh_guide_env-vars.md\":\"D2oUaqNR\",\"zh_guide_extension-notes.md\":\"D9lGXhKW\",\"zh_guide_extensions.md\":\"CNtRfejb\",\"zh_guide_first-build.md\":\"DSwF9CHy\",\"zh_guide_index.md\":\"DR1hBcxc\",\"zh_guide_installation.md\":\"CWZRSBwL\",\"zh_guide_migrate-from-v2.md\":\"Dp7VZbGT\",\"zh_guide_sapi-reference.md\":\"TjYI_FdR\",\"zh_guide_troubleshooting.md\":\"CJ6N_2fk\",\"zh_index.md\":\"BXvgifjq\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"StaticPHP\",\"description\":\"A powerful tool designed for building portable executables including PHP, extensions, and more.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/images/static-php_nobg.png\",\"nav\":[],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/crazywhalecc/static-php-cli\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2023-present crazywhalecc\"},\"externalLinkIcon\":true,\"search\":{\"provider\":\"algolia\",\"options\":{\"appId\":\"IHJHUB1SF1\",\"apiKey\":\"8266d31cc2ffbd0e059f1c6e5bdaf8fc\",\"indexName\":\"static-php docs\",\"askAi\":{\"assistantId\":\"b72369b2-60a5-461d-902c-5c18d8c05902\",\"agentStudio\":true,\"sidePanel\":true}}}},\"locales\":{\"en\":{\"label\":\"English\",\"lang\":\"en\",\"themeConfig\":{\"nav\":[{\"text\":\"Guide\",\"link\":\"/en/guide/\"},{\"text\":\"Develop\",\"link\":\"/en/develop/\"},{\"text\":\"Contributing\",\"link\":\"/en/contributing/\"},{\"text\":\"FAQ\",\"link\":\"/en/faq/\"},{\"text\":\"v3 (alpha)\",\"items\":[{\"text\":\"v3 (alpha)\",\"link\":\"/en/\"},{\"text\":\"v2\",\"link\":\"https://static-php.github.io/v2-docs/\"}]}],\"sidebar\":{\"/en/guide/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Overview\",\"link\":\"/en/guide/\"},{\"text\":\"Installation\",\"link\":\"/en/guide/installation\"},{\"text\":\"First Build\",\"link\":\"/en/guide/first-build\"},{\"text\":\"PHP SAPI Reference\",\"link\":\"/en/guide/sapi-reference\"},{\"text\":\"CLI Reference\",\"link\":\"/en/guide/cli-reference\"},{\"text\":\"Migrating from v2\",\"link\":\"/en/guide/migrate-from-v2\"}]},{\"text\":\"Extensions\",\"items\":[{\"text\":\"Supported Extensions\",\"link\":\"/en/guide/extensions\"},{\"text\":\"Extension Notes\",\"link\":\"/en/guide/extension-notes\"},{\"text\":\"Build Command Generator\",\"link\":\"/en/guide/cli-generator\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"Environment Variables\",\"link\":\"/en/guide/env-vars\"},{\"text\":\"Dependency Table\",\"link\":\"/en/guide/deps-map\"},{\"text\":\"Troubleshooting\",\"link\":\"/en/guide/troubleshooting\"}]}],\"/en/develop/\":[{\"text\":\"Overview\",\"items\":[{\"text\":\"Get Started\",\"link\":\"/en/develop/\"},{\"text\":\"Project Structure\",\"link\":\"/en/develop/structure\"}]},{\"text\":\"Configuration Reference\",\"items\":[{\"text\":\"Registry\",\"link\":\"/en/develop/registry\"},{\"text\":\"Package Model\",\"link\":\"/en/develop/package-model\"},{\"text\":\"Artifact Model\",\"link\":\"/en/develop/artifact-model\"},{\"text\":\"craft.yml\",\"link\":\"/en/develop/craft-yml\"}]},{\"text\":\"Build System\",\"items\":[{\"text\":\"Build Lifecycle\",\"link\":\"/en/develop/build-lifecycle\"},{\"text\":\"Compilation Tools\",\"link\":\"/en/develop/system-build-tools\"},{\"text\":\"Doctor\",\"link\":\"/en/develop/doctor-module\"},{\"text\":\"PHP Source Modifications\",\"link\":\"/en/develop/php-src-changes\"}]},{\"text\":\"Extending StaticPHP\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/en/develop/extending/\"},{\"text\":\"Writing Package Classes\",\"link\":\"/en/develop/extending/package-classes\"},{\"text\":\"Annotations Reference\",\"link\":\"/en/develop/extending/annotations\"},{\"text\":\"Lifecycle Hooks\",\"link\":\"/en/develop/extending/lifecycle-hooks\"},{\"text\":\"Dependency Injection\",\"link\":\"/en/develop/extending/dependency-injection\"},{\"text\":\"Custom Artifact\",\"link\":\"/en/develop/extending/custom-artifact\"}]}],\"/en/contributing/\":[{\"text\":\"Contributing\",\"items\":[{\"text\":\"Contributing Guide\",\"link\":\"/en/contributing/\"}]}],\"/en/faq/\":[{\"text\":\"FAQ\",\"items\":[{\"text\":\"Frequently Asked Questions\",\"link\":\"/en/faq/\"}]}]},\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2023-present crazywhalecc\"}}},\"zh\":{\"label\":\"简体中文\",\"lang\":\"zh\",\"themeConfig\":{\"nav\":[{\"text\":\"构建指南\",\"link\":\"/zh/guide/\"},{\"text\":\"开发者\",\"link\":\"/zh/develop/\"},{\"text\":\"贡献\",\"link\":\"/zh/contributing/\"},{\"text\":\"FAQ\",\"link\":\"/zh/faq/\"},{\"text\":\"v3 (alpha)\",\"items\":[{\"text\":\"v3 (alpha)\",\"link\":\"/zh/\"},{\"text\":\"v2\",\"link\":\"https://static-php.github.io/v2-docs/\"}]}],\"sidebar\":{\"/zh/guide/\":[{\"text\":\"快速上手\",\"items\":[{\"text\":\"概览\",\"link\":\"/zh/guide/\"},{\"text\":\"安装\",\"link\":\"/zh/guide/installation\"},{\"text\":\"第一次构建\",\"link\":\"/zh/guide/first-build\"},{\"text\":\"PHP SAPI 构建参考\",\"link\":\"/zh/guide/sapi-reference\"},{\"text\":\"命令行参考\",\"link\":\"/zh/guide/cli-reference\"},{\"text\":\"从 v2 迁移\",\"link\":\"/zh/guide/migrate-from-v2\"}]},{\"text\":\"扩展\",\"items\":[{\"text\":\"支持的扩展列表\",\"link\":\"/zh/guide/extensions\"},{\"text\":\"扩展注意事项\",\"link\":\"/zh/guide/extension-notes\"},{\"text\":\"命令生成器\",\"link\":\"/zh/guide/cli-generator\"}]},{\"text\":\"参考\",\"items\":[{\"text\":\"环境变量\",\"link\":\"/zh/guide/env-vars\"},{\"text\":\"依赖关系图\",\"link\":\"/zh/guide/deps-map\"},{\"text\":\"故障排除\",\"link\":\"/zh/guide/troubleshooting\"}]}],\"/zh/develop/\":[{\"text\":\"概览\",\"items\":[{\"text\":\"开发简介\",\"link\":\"/zh/develop/\"},{\"text\":\"项目结构\",\"link\":\"/zh/develop/structure\"}]},{\"text\":\"配置参考\",\"items\":[{\"text\":\"Registry\",\"link\":\"/zh/develop/registry\"},{\"text\":\"Package 模型\",\"link\":\"/zh/develop/package-model\"},{\"text\":\"Artifact 模型\",\"link\":\"/zh/develop/artifact-model\"},{\"text\":\"craft.yml 配置\",\"link\":\"/zh/develop/craft-yml\"}]},{\"text\":\"构建系统\",\"items\":[{\"text\":\"构建生命周期\",\"link\":\"/zh/develop/build-lifecycle\"},{\"text\":\"编译工具\",\"link\":\"/zh/develop/system-build-tools\"},{\"text\":\"Doctor 环境检查\",\"link\":\"/zh/develop/doctor-module\"},{\"text\":\"对 PHP 源码的修改\",\"link\":\"/zh/develop/php-src-changes\"}]},{\"text\":\"扩展 StaticPHP\",\"items\":[{\"text\":\"简介\",\"link\":\"/zh/develop/extending/\"},{\"text\":\"编写 Package 类\",\"link\":\"/zh/develop/extending/package-classes\"},{\"text\":\"注解参考\",\"link\":\"/zh/develop/extending/annotations\"},{\"text\":\"生命周期 Hook\",\"link\":\"/zh/develop/extending/lifecycle-hooks\"},{\"text\":\"依赖注入\",\"link\":\"/zh/develop/extending/dependency-injection\"},{\"text\":\"自定义 Artifact\",\"link\":\"/zh/develop/extending/custom-artifact\"}]}],\"/zh/contributing/\":[{\"text\":\"贡献指南\",\"items\":[{\"text\":\"贡献指南\",\"link\":\"/zh/contributing/\"}]}],\"/zh/faq/\":[{\"text\":\"FAQ\",\"items\":[{\"text\":\"常见问题\",\"link\":\"/zh/faq/\"}]}]},\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2023-present crazywhalecc\"}}}},\"cleanUrls\":false,\"additionalConfig\":{}}");</script>
|
||
|
||
</body>
|
||
</html> |