Skip to content

🚀 快速开始

本页用最少的步骤带你跑通第一个 Composer Skills 程序。两个示例分别覆盖两套 SDK:Packagist API(纯 Go,无需 PHP)和 Composer CLI 封装(需要本地 PHP + Composer)。

🧭 路线图

📦 第 0 步:安装

bash
go get github.com/scagogogo/composer-skills

系统要求

  • Go 1.23+go.mod 已声明 go 1.23.0
  • Packagist API 示例:无外部依赖,纯 Go。
  • Composer CLI 示例:PHP 7.4+ 和 Composer 2.0+(缺失时 SDK 会自动安装 Composer)。 详见 安装

🌐 示例 1:Packagist API 查询(无需 PHP)

这个示例不依赖本地 PHP/Composer,直接 HTTP 调用 Packagist,搜索包、拉详情、看统计与安全公告。

go
package main

import (
    "fmt"
    "time"

    "github.com/scagogogo/composer-skills/pkg/client"
)

func main() {
    // 创建客户端,设置 30 秒超时
    c := client.NewComposerClient(30 * time.Second)

    // 1. 搜索包
    results, err := c.SearchPackages("logging", 10, 1)
    if err != nil {
        fmt.Printf("搜索失败: %v\n", err)
        return
    }
    fmt.Printf("🔍 找到 %d 个与 logging 相关的包\n", results.Total)

    // 2. 获取包详情
    pkg, err := c.GetPackage("monolog/monolog")
    if err != nil {
        fmt.Printf("获取详情失败: %v\n", err)
        return
    }
    fmt.Printf("📦 %s: %s\n", pkg.Package.Name, pkg.Package.Description)

    // 3. 安全公告
    advisories, _ := c.GetSecurityAdvisories()
    fmt.Printf("🔒 当前共 %d 条安全公告\n", len(advisories.Advisories))

    // 4. 统计信息
    stats, _ := c.GetStatistics()
    fmt.Printf("📈 Packagist 总包数: %d\n", stats.Packages)
}

预期输出:

text
🔍 找到 1234 个与 logging 相关的包
📦 monolog/monolog: Sends your logs to files, sockets, inboxes, databases and various web services
🔒 当前共 521 条安全公告
📈 Packagist 总包数: 395821

(数字会随 Packagist 实时数据变化。)

🛠️ 示例 2:Composer CLI 封装(需要 PHP + Composer)

这个示例在本地 PHP 项目里安装依赖、审计漏洞。如果机器上没装 Composer,DefaultOptions() 已开启 AutoInstall,会自动拉取安装。

go
package main

import (
    "fmt"
    "log"

    "github.com/scagogogo/composer-skills/pkg/composer"
)

func main() {
    // 默认开启 AutoInstall:缺失 Composer 会自动安装
    comp, err := composer.New(composer.DefaultOptions())
    if err != nil {
        log.Fatalf("初始化失败: %v", err)
    }
    comp.SetWorkingDir("/path/to/php/project")

    // 安装依赖
    if err := comp.Install(false, true); err != nil {
        log.Fatalf("install 失败: %v", err)
    }

    // 添加一个包
    _ = comp.RequirePackage("monolog/monolog", "^3.0", false)

    // 安全审计(结构化结果)
    result, err := comp.AuditWithJSON()
    if err != nil {
        log.Fatalf("audit 失败: %v", err)
    }
    fmt.Printf("🔒 发现漏洞: %d\n", result.Found)
    for _, v := range result.Advisories {
        fmt.Printf("  ⚠ %s: %s (%s)\n", v.Package, v.Title, v.Severity)
    }
}

工作目录

请把 SetWorkingDir 的路径换成你本地一个含有 composer.json 的 PHP 项目目录,否则 install/require 会因找不到 composer.json 而失败。

预期输出:

text
🔒 发现漏洞: 0

如果项目里有已知漏洞依赖,会列出每个漏洞的包名、标题和严重等级。

⚡ 再省事一点:QuickSetup

如果你只想一步到位——检测 + 自动安装 + 拿到实例——用 QuickSetup

go
comp, err := composer.QuickSetup("/path/to/php/project", true)
if err != nil {
    log.Fatal(err)
}
// comp 已就绪,可直接调用任意方法

🧭 下一步

  • 📦 安装 —— 依赖要求、环境变量、验证安装。
  • 🏗️ 双 SDK 架构 —— 何时用 Packagist API,何时用 Composer CLI。
  • 🔧 自动安装机制 —— 检测→PHP→安装→验证→就绪的全流程。
  • 🧪 类型化返回值 —— AuditResultOutdatedResult 等结构化结果详解。
  • 🔄 CI/CD 流水线 —— 把审计放进 GitHub Actions。

基于 MIT 许可证发布