Skip to content

🧪 RequireDryRun 模拟添加包依赖

🔍 RequireDryRun 模拟向项目添加指定依赖包的过程,但不会真正修改 composer.json 或安装包,相当于执行 composer require --dry-run packageName:version,适合在执行添加前预览依赖解析结果与潜在冲突。

📋 签名

go
func (c *Composer) RequireDryRun(packageName string, version string) (string, error)

📥 参数

参数类型说明
packageNamestring要模拟添加的包名,例如 symfony/console
versionstring版本约束,例如 ^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", ...)

基于 MIT 许可证发布