🔧 自动安装机制
Composer Skills 最省心的特性之一:目标机器没装 Composer?SDK 自己装。 本页讲清楚这条"检测 → 检查 PHP → 安装 → 验证 → 就绪"链路是怎么工作的,以及如何在代码里触发它。
🔄 流程总览
当 Options.AutoInstall = true(默认开启)时,创建 *Composer 实例会触发如下流程:
默认就开启
composer.DefaultOptions() 返回的 Options 已设 AutoInstall: true,所以下面这一行就包含了完整的检测与安装逻辑:
comp, err := composer.New(composer.DefaultOptions())🚀 QuickSetup:一步到位
如果你嫌手写 New + SetWorkingDir 太啰嗦,用 QuickSetup 一步完成检测、安装与实例创建:
package main
import (
"fmt"
"log"
"github.com/scagogogo/composer-skills/pkg/composer"
)
func main() {
// workingDir + autoInstall,一步搞定
comp, err := composer.QuickSetup("/path/to/php/project", true)
if err != nil {
log.Fatalf("快速设置失败: %v", err)
}
// 实例已就绪
ver, _ := comp.GetVersion()
fmt.Printf("✅ Composer 就绪,版本: %s\n", ver)
}需要观察安装过程?用带进度回调的 QuickSetupWithProgress:
comp, installResult, err := composer.QuickSetupWithProgress(
"/path/to/php/project",
func(stage string, percent int) {
fmt.Printf("[%s] %d%%\n", stage, percent)
},
)🧩 底层组件
自动安装链路由两个底层包支撑,你也可以单独使用它们:
检测器 Detector
包路径:github.com/scagogogo/composer-skills/pkg/detector
跨操作系统查找已安装的 Composer:扫描 PATH、常见安装路径、COMPOSER 环境变量,并用 which/where 兜底。
d := detector.NewDetector()
if d.IsInstalled() {
path, _ := d.Detect()
fmt.Printf("Composer 位于: %s\n", path)
} else {
fmt.Println("未检测到 Composer")
}详见 Detector 文档。
安装器 Installer
包路径:github.com/scagogogo/composer-skills/pkg/installer
负责实际下载与安装,支持 Linux 发行版识别、macOS brew、Windows phar 包装,并能顺带安装 PHP。
inst := installer.NewInstaller(installer.SmartConfig())
if err := inst.Install(); err != nil {
log.Fatal(err)
}两个常用配置:
installer.DefaultConfig()—— 默认配置。installer.SmartConfig()—— 智能配置:按平台自动选择最佳安装方式(brew/apt/直接下载)。
详见 Installer 文档。
🖥️ 智能默认:按平台选择
安装器会根据运行平台走不同路径,这就是"智能默认":
| 平台 | 首选策略 | 兜底策略 |
|---|---|---|
| 🐧 Linux | 发行版包管理器(apt/dnf/pacman) | 下载 composer.phar + 包装脚本 |
| 🍎 macOS | brew install composer | 下载 composer.phar |
| 🪟 Windows | 下载 composer.phar + .cmd 包装 | 同左 |
Linux 上还能识别发行版:DetectLinuxDistro() 解析 /etc/os-release,决定用 apt、dnf 还是其他。
需要 sudo?
通过包管理器全局安装可能需要权限。安装器提供 useSudo 参数控制是否加 sudo。在 CI 容器里通常以 root 运行,无需 sudo。
⏱️ 关掉自动安装
某些场景(生产环境、严格审计)你不希望程序偷偷装东西。把 AutoInstall 关掉即可:
options := composer.DefaultOptions()
options.AutoInstall = false
comp, err := composer.New(options)
// 若 Composer 不存在,err 会告诉你🧭 下一步
- 📡 Detector 文档 —— 检测路径、环境变量、跨平台细节。
- 📥 Installer 文档 —— 配置项、进度回调、发行版识别。
- 🖥️ 跨平台支持 —— 三大平台支持矩阵。
- 🔄 CI/CD 流水线 —— 在 GitHub Actions 里享受自动安装。