📦 RequirePackageWithOptions 带自定义选项添加包依赖
🔍
RequirePackageWithOptions向项目添加一个新的依赖包,并支持传入额外选项(如--dev、--prefer-source、--no-update),相当于执行composer require [options] packageName:version。
📋 签名
go
func (c *Composer) RequirePackageWithOptions(packageName string, version string, options map[string]string) error📥 参数
| 参数 | 类型 | 说明 |
|---|---|---|
packageName | string | 要添加的包名,例如 symfony/console |
version | string | 版本约束,例如 ^5.0;传空字符串 "" 表示使用最新版本 |
options | map[string]string | 额外选项映射,键为选项名、值为选项值;值为空字符串 "" 表示无值开关型选项 |
📤 返回值
| 返回值 | 类型 | 说明 |
|---|---|---|
| 第一个返回值 | error | 添加过程中发生错误时返回,成功时为 nil |
📝 示例
go
package main
import (
"log"
"github.com/scagogogo/composer-skills/pkg/composer"
)
func main() {
comp, err := composer.NewComposer()
if err != nil {
log.Fatalf("创建 Composer 实例失败: %v", err)
}
// 添加开发依赖并指定多个选项
options := map[string]string{
"dev": "",
"prefer-source": "",
"no-update": "",
}
if err := comp.RequirePackageWithOptions("phpunit/phpunit", "^9.0", options); err != nil {
log.Fatalf("添加依赖失败: %v", err)
}
log.Println("依赖添加完成")
}🚀 进阶
- 📋 若无需额外选项,使用更简洁的
RequirePackage(packageName, version, dev);其中dev布尔值等价于在options中加入"dev": ""。 - 🧪 搭配
"dry-run": ""可在不修改composer.json的前提下预演添加结果,等价于RequireDryRun但选项更灵活。 - ⚙️ 常用选项:
dev(开发依赖)、prefer-source/prefer-dist(安装来源)、no-update(仅改 json 不解析依赖)、ignore-platform-reqs(忽略平台要求)。 - 🔗 底层通过
buildOptionsArgs(options)将 map 展开为命令行参数,再拼接package:version后调用c.Run("require", ...);map 遍历顺序不影响最终命令构造的确定性。