🧪 RequireDryRun 模拟添加包依赖
🔍
RequireDryRun模拟向项目添加指定依赖包的过程,但不会真正修改composer.json或安装包,相当于执行composer require --dry-run packageName:version,适合在执行添加前预览依赖解析结果与潜在冲突。
📋 签名
go
func (c *Composer) RequireDryRun(packageName string, version string) (string, error)📥 参数
| 参数 | 类型 | 说明 |
|---|---|---|
packageName | string | 要模拟添加的包名,例如 symfony/console |
version | string | 版本约束,例如 ^5.0;传空字符串 "" 表示使用最新版本 |
📤 返回值
| 返回值 | 类型 | 说明 |
|---|---|---|
| 第一个返回值 | string | 模拟添加过程的文本输出 |
| 第二个返回值 | error | 模拟过程中发生错误时返回,成功时为 nil |
📝 示例
go
package main
import (
"fmt"
"log"
"github.com/scagogogo/composer-skills/pkg/composer"
)
func main() {
comp, err := composer.NewComposer()
if err != nil {
log.Fatalf("创建 Composer 实例失败: %v", err)
}
// 模拟添加指定版本
output, err := comp.RequireDryRun("symfony/console", "^5.0")
if err != nil {
log.Fatalf("模拟添加失败: %v", err)
}
fmt.Println("模拟添加结果:")
fmt.Println(output)
// 模拟添加最新版本
output, err = comp.RequireDryRun("monolog/monolog", "")
if err != nil {
log.Fatalf("模拟添加失败: %v", err)
}
fmt.Println(output)
}🚀 进阶
- ✅ 预演通过后再用
RequirePackage(packageName, version, dev)执行真实添加;如需带自定义选项(如--prefer-source、--no-update),使用RequirePackageWithOptions并在options中加入"dry-run": ""实现等价效果。 - 🧪 在引入新依赖前先跑
RequireDryRun,可提前发现版本冲突或不可解析约束,避免污染composer.json。 - 📦 若需一次性模拟添加多个包,可参考
RequireMultiple,并在选项中加入"dry-run": ""。 - 🔗 底层根据
version是否为空拼接package:version或纯package,再调用c.Run("require", "--dry-run", ...)。