Skip to content

❓ WhyPackage

解释为什么项目中安装了指定的包,等价于 composer why package/name

何时使用

  • 🤔 在依赖列表里看到一个不眼熟的包,想知道它被谁引入。
  • 🧹 移除某个包前确认是否仍有其他包依赖它。
  • 🐛 排查「为何装了某个版本的传递依赖」。

签名

go
func (c *Composer) WhyPackage(packageName string) (string, error)

参数

参数类型说明
packageNamestring要查询安装原因的包名

返回值

类型说明
输出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;想知道「哪些包依赖了某包」用 ShowReverseDependenciescomposer depends)。

why 与 depends 的区别

why 回答「这个包为何存在」,输出依赖链路;depends 回答「谁依赖了它」,输出反向依赖。两者视角互补。

🔍 相关方法

基于 MIT 许可证发布