Skip to content

📦 BatchRequire

批量添加多个 Composer 依赖包,支持遇错继续与开发依赖标记。

何时使用

初始化项目、迁移依赖清单或脚本化安装一组相关包时,希望一次调用完成并拿到每包成功/失败统计时使用。

签名

go
func (c *Composer) BatchRequire(packages map[string]string, dev bool, continueOnError bool) (*BatchRequireResult, error)

参数

参数类型说明
packagesmap[string]string包名到版本约束的映射,例如 {"symfony/console": "^5.4"}
devbool是否作为 require-dev 开发依赖添加
continueOnErrorbool遇到错误是否继续添加后续包;为 false 时遇首个错误即停止

返回值

  • *BatchRequireResult:批量添加结果,含逐包结果与计数
  • error:第一个遇到的错误(仅当 continueOnErrorfalse 时返回,否则为 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
  • 单包添加可使用 RequirePackageRequirePackageWithOptions(见 packages.go)

基于 MIT 许可证发布