📦 BatchRequire
批量添加多个 Composer 依赖包,支持遇错继续与开发依赖标记。
何时使用
初始化项目、迁移依赖清单或脚本化安装一组相关包时,希望一次调用完成并拿到每包成功/失败统计时使用。
签名
go
func (c *Composer) BatchRequire(packages map[string]string, dev bool, continueOnError bool) (*BatchRequireResult, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
packages | map[string]string | 包名到版本约束的映射,例如 {"symfony/console": "^5.4"} |
dev | bool | 是否作为 require-dev 开发依赖添加 |
continueOnError | bool | 遇到错误是否继续添加后续包;为 false 时遇首个错误即停止 |
返回值
*BatchRequireResult:批量添加结果,含逐包结果与计数error:第一个遇到的错误(仅当continueOnError为false时返回,否则为nil)
go
type BatchRequireResult struct {
Results []RequireResult `json:"results,omitempty"`
SuccessCount int `json:"success_count"`
FailCount int `json:"fail_count"`
TotalCount int `json:"total_count"`
}示例
go
package main
import (
"fmt"
"log"
"github.com/scagogogo/composer-skills/pkg/composer"
)
func main() {
comp, err := composer.New(composer.DefaultOptions())
if err != nil {
log.Fatal(err)
}
packages := map[string]string{
"symfony/console": "^5.4",
"monolog/monolog": "^2.0",
"psr/log": "^1.1",
}
result, err := comp.BatchRequire(packages, false, true)
if err != nil {
log.Printf("部分添加失败: %v", err)
}
fmt.Printf("成功: %d, 失败: %d, 总计: %d\n",
result.SuccessCount, result.FailCount, result.TotalCount)
}进阶
- 该方法逐包调用
RequirePackage,失败信息写入对应RequireResult.Warnings - 若需原子性(要么全成功要么回滚),应设
continueOnError=false并自行处理error - 对应的移除操作见 BatchRemove
- 单包添加可使用
RequirePackage或RequirePackageWithOptions(见 packages.go)