❓ WhyPackage
解释为什么项目中安装了指定的包,等价于 composer why package/name。
何时使用
- 🤔 在依赖列表里看到一个不眼熟的包,想知道它被谁引入。
- 🧹 移除某个包前确认是否仍有其他包依赖它。
- 🐛 排查「为何装了某个版本的传递依赖」。
签名
go
func (c *Composer) WhyPackage(packageName string) (string, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
packageName | string | 要查询安装原因的包名 |
返回值
| 值 | 类型 | 说明 |
|---|---|---|
| 输出 | 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.WhyPackage("symfony/polyfill-mbstring")
if err != nil {
log.Fatalf("查询安装原因失败: %v", err)
}
fmt.Println("安装原因:", output)
}进阶
WhyWithOptions
需要附加选项(如 --recursive)时使用:
go
func (c *Composer) WhyWithOptions(packageName string, options map[string]string) (string, error)反向问题
想知道「为什么装不上某个版本」用 WhyNotPackage;想知道「哪些包依赖了某包」用 ShowReverseDependencies(composer depends)。
why 与 depends 的区别
why 回答「这个包为何存在」,输出依赖链路;depends 回答「谁依赖了它」,输出反向依赖。两者视角互补。
🔍 相关方法
WhyNotPackage:解释为何无法安装指定版本。ShowDependencyTree:查看完整依赖树。