🚫 WhyNotPackage
解释为什么不能安装指定版本的包,等价于 composer why-not package/name version。
何时使用
- 🐛 升级或锁定版本时遇到冲突,需要定位是哪个约束阻止了安装。
- 🔍 评估能否引入某个特定版本。
- 📋 在依赖审查中说明版本选择的根因。
签名
go
func (c *Composer) WhyNotPackage(packageName string, version string) (string, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
packageName | string | 要查询的包名 |
version | string | 要查询的版本,例如 v4.0.0 |
返回值
| 值 | 类型 | 说明 |
|---|---|---|
| 输出 | string | 解释结果的输出,列出阻止安装的约束链路 |
| 错误 | error | 查询过程中发生错误时返回 |
示例
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.Fatalf("初始化失败: %v", err)
}
output, err := comp.WhyNotPackage("symfony/console", "v4.0.0")
if err != nil {
log.Fatalf("查询版本约束失败: %v", err)
}
fmt.Println("无法安装的原因:", output)
}进阶
WhyNotWithOptions
需要附加选项时使用(additional_methods.go):
go
func (c *Composer) WhyNotWithOptions(packageName, version string, options map[string]string) (string, error)正向问题
- 想知道「某包为何被安装」用
WhyPackage。 - 想知道「能否升级到最新」用
OutdatedPackages或结构化GetOutdatedInfo。
版本格式
version 应使用 Composer 能识别的版本字符串,如 v4.0.0、^4.0 等。传入非法格式可能得到难以解读的错误输出。
🔍 相关方法
WhyPackage:解释为何安装了某包。OutdatedPackages:查看可升级的包。