🚀 快速开始
本页用最少的步骤带你跑通第一个 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 已就绪,可直接调用任意方法