mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-02 14:25:41 +08:00
64 lines
10 KiB
JavaScript
64 lines
10 KiB
JavaScript
import{_ as s,c as a,o as p,aj as e}from"./chunks/framework.C2AwuPrQ.js";const h=JSON.parse('{"title":"项目结构","description":"","frontmatter":{},"headers":[],"relativePath":"zh/develop/structure.md","filePath":"zh/develop/structure.md"}'),l={name:"zh/develop/structure.md"};function i(c,n,t,o,r,d){return p(),a("div",null,[...n[0]||(n[0]=[e(`<h1 id="项目结构" tabindex="-1">项目结构 <a class="header-anchor" href="#项目结构" aria-label="Permalink to “项目结构”"></a></h1><h2 id="概念" tabindex="-1">概念 <a class="header-anchor" href="#概念" aria-label="Permalink to “概念”"></a></h2><p>StaticPHP 本身是一个基于 <code>symfony/console</code> 的 CLI 应用,核心代码位于 <code>src/StaticPHP</code> 目录下。 它主要分为几个模块:</p><ul><li><strong>Registry</strong>:负责管理注册表数据,每个注册表含有多个包(Package),StaticPHP 项目本身内置一个 <code>core</code> 注册表,包含 PHP 及相关扩展、依赖等。</li><li><strong>Package</strong>:代表一个包,包的种类有四种:<code>php-extension</code>(PHP 扩展)、<code>library</code>(库)、<code>target</code>(构建目标)、<code>virtual-target</code>(虚构建目标)。每个包包含构建信息、依赖关系等。</li><li><strong>Installer/Builder</strong>:负责处理包的安装和构建逻辑,调用构建命令、解压构建产物、处理构建结果等。</li><li><strong>Doctor</strong>:提供系统环境检查功能,负责安装和检查系统层面依赖的工具、需要的文件等,如 <code>make</code>、<code>cmake</code>、<code>autoconf</code> 等。</li><li><strong>Runtime/Executor</strong>:包含运行时相关的工具类,如执行 shell 命令、执行 CMake 构建等。</li><li><strong>Toolchain</strong>:对不同操作系统及环境,提供对应系统的工具链抽象接口,负责处理构建过程中与系统环境相关的差异。</li><li><strong>Utils</strong>:一些通用的工具类,如文件系统操作、日志记录、操作系统相关助手方法等。</li><li><strong>DependencyResolver</strong>:负责解析包之间的依赖关系,生成构建顺序等。</li></ul><h2 id="目录结构" tabindex="-1">目录结构 <a class="header-anchor" href="#目录结构" aria-label="Permalink to “目录结构”"></a></h2><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></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>static-php-cli/</span></span>
|
||
<span class="line"><span>├── bin/ # 可执行入口脚本(spc、spc.ps1、setup-runtime 等)</span></span>
|
||
<span class="line"><span>├── config/</span></span>
|
||
<span class="line"><span>│ ├── env.ini # 默认环境变量配置</span></span>
|
||
<span class="line"><span>│ ├── env.custom.ini # 用户自定义环境变量(覆盖 env.ini)</span></span>
|
||
<span class="line"><span>│ ├── artifact/ # 构建产物配置(下载工具链、预构建二进制等)</span></span>
|
||
<span class="line"><span>│ └── pkg/ # 包配置文件(YAML)</span></span>
|
||
<span class="line"><span>│ ├── ext/ # PHP 扩展包配置(ext-*.yml、builtin-extensions.yml)</span></span>
|
||
<span class="line"><span>│ ├── lib/ # 库包配置(*.yml)</span></span>
|
||
<span class="line"><span>│ └── target/ # 构建目标配置(php.yml、curl.yml 等)</span></span>
|
||
<span class="line"><span>├── src/</span></span>
|
||
<span class="line"><span>│ ├── bootstrap.php # 应用引导(注册自动加载、DI 容器等)</span></span>
|
||
<span class="line"><span>│ ├── globals/ # 全局辅助函数</span></span>
|
||
<span class="line"><span>│ ├── Package/ # 各包的构建逻辑实现(PHP 类)</span></span>
|
||
<span class="line"><span>│ │ ├── Artifact/ # 构建产物的自定义下载/解压逻辑</span></span>
|
||
<span class="line"><span>│ │ ├── Command/ # 包级别自定义命令</span></span>
|
||
<span class="line"><span>│ │ ├── Extension/ # PHP 扩展构建类(ext-*.php)</span></span>
|
||
<span class="line"><span>│ │ ├── Library/ # 库构建类(*.php)</span></span>
|
||
<span class="line"><span>│ │ └── Target/ # 构建目标类(php.php、curl.php 等)</span></span>
|
||
<span class="line"><span>│ └── StaticPHP/ # 框架核心代码</span></span>
|
||
<span class="line"><span>│ ├── ConsoleApplication.php # Symfony Console 应用入口</span></span>
|
||
<span class="line"><span>│ ├── Artifact/ # 构建产物下载与解压(Downloader、Extractor 等)</span></span>
|
||
<span class="line"><span>│ ├── Attribute/ # PHP 注解定义</span></span>
|
||
<span class="line"><span>│ │ ├── Artifact/ # 产物相关注解(CustomSource、BinaryExtract 等)</span></span>
|
||
<span class="line"><span>│ │ ├── Doctor/ # Doctor 相关注解(CheckItem、FixItem 等)</span></span>
|
||
<span class="line"><span>│ │ └── Package/ # 包构建相关注解(BuildFor、BeforeStage、AfterStage、</span></span>
|
||
<span class="line"><span>│ │ # CustomPhpConfigureArg、PatchBeforeBuild 等)</span></span>
|
||
<span class="line"><span>│ ├── Command/ # CLI 命令实现(build-libs、build-target、doctor 等)</span></span>
|
||
<span class="line"><span>│ ├── Config/ # 配置加载与验证(PackageConfig、ArtifactConfig 等)</span></span>
|
||
<span class="line"><span>│ ├── DI/ # 依赖注入容器(ApplicationContext、CallbackInvoker)</span></span>
|
||
<span class="line"><span>│ ├── Doctor/ # 系统环境检查与修复(Doctor、CheckResult)</span></span>
|
||
<span class="line"><span>│ ├── Exception/ # 自定义异常类</span></span>
|
||
<span class="line"><span>│ ├── Package/ # 包核心模型与构建调度</span></span>
|
||
<span class="line"><span>│ │ ├── Package.php # 包基类</span></span>
|
||
<span class="line"><span>│ │ ├── LibraryPackage.php # 库包类型</span></span>
|
||
<span class="line"><span>│ │ ├── PhpExtensionPackage.php # PHP 扩展包类型</span></span>
|
||
<span class="line"><span>│ │ ├── TargetPackage.php # 构建目标包类型</span></span>
|
||
<span class="line"><span>│ │ ├── PackageInstaller.php # 包安装器(下载、解压源码)</span></span>
|
||
<span class="line"><span>│ │ └── PackageBuilder.php # 包构建器(执行构建流程)</span></span>
|
||
<span class="line"><span>│ ├── Registry/ # 注册表管理(Registry、PackageLoader、ArtifactLoader)</span></span>
|
||
<span class="line"><span>│ ├── Runtime/ # 运行时工具</span></span>
|
||
<span class="line"><span>│ │ ├── Executor/ # 命令执行器(UnixAutoconfExecutor、UnixCMakeExecutor、</span></span>
|
||
<span class="line"><span>│ │ │ # WindowsCMakeExecutor、Executor 基类)</span></span>
|
||
<span class="line"><span>│ │ ├── Shell/ # Shell 抽象(UnixShell、WindowsCmd 等)</span></span>
|
||
<span class="line"><span>│ │ └── SystemTarget.php # 系统目标信息</span></span>
|
||
<span class="line"><span>│ ├── Toolchain/ # 工具链抽象(GccNative、Musl、MSVC、Zig、ClangBrew 等)</span></span>
|
||
<span class="line"><span>│ └── Util/ # 通用工具类</span></span>
|
||
<span class="line"><span>│ ├── System/ # 系统平台工具(LinuxUtil、MacOSUtil、WindowsUtil 等)</span></span>
|
||
<span class="line"><span>│ ├── BuildRootTracker.php # buildroot 文件追踪</span></span>
|
||
<span class="line"><span>│ ├── DependencyResolver.php # 依赖解析与构建顺序</span></span>
|
||
<span class="line"><span>│ ├── FileSystem.php # 文件系统操作</span></span>
|
||
<span class="line"><span>│ ├── GlobalEnvManager.php # 全局环境变量管理</span></span>
|
||
<span class="line"><span>│ ├── InteractiveTerm.php # 交互式终端输出</span></span>
|
||
<span class="line"><span>│ ├── LicenseDumper.php # 开源协议导出</span></span>
|
||
<span class="line"><span>│ ├── PkgConfigUtil.php # pkg-config 工具封装</span></span>
|
||
<span class="line"><span>│ ├── SourcePatcher.php # 源码补丁工具</span></span>
|
||
<span class="line"><span>│ └── SPCConfigUtil.php # SPC 配置读取工具</span></span>
|
||
<span class="line"><span>├── tests/ # 单元测试与集成测试</span></span>
|
||
<span class="line"><span>├── downloads/ # 下载缓存目录(源码包、预构建二进制)</span></span>
|
||
<span class="line"><span>├── source/ # 解压后的源码目录</span></span>
|
||
<span class="line"><span>├── buildroot/ # 构建输出目录(头文件、静态库等)</span></span>
|
||
<span class="line"><span>├── pkgroot/ # 按平台归档的构建产物</span></span>
|
||
<span class="line"><span>└── spc.registry.yml # core 注册表定义文件</span></span></code></pre></div><p>需要注意的是,<code>src/Package</code> 目录下的类主要负责实现具体包的构建逻辑,而 <code>src/StaticPHP</code> 目录下的类则提供了构建框架的核心功能,如命令调度、环境检查、工具链抽象等,两者是解耦的。<code>src/Package</code> 对应的是 <code>core</code> 注册表中的包,其中包含 PHP 及相关扩展、库、构建目标等的具体实现,而 <code>src/StaticPHP</code> 则是整个构建系统的基础设施,支持不同注册表和包的构建需求。</p>`,7)])])}const u=s(l,[["render",i]]);export{h as __pageData,u as default};
|