Composer show –self 查看当前项目详细信息【工具】

8次阅读

composer show –self 查的是当前项目自身(即 composer.json 中定义的 root package)的元数据,输出完全源自本地 composer.json 字段解析,不读 composer.lock 也不查 vendor/ 状态,可显示 name、description、require 等字段,但 version 通常不显示。

Composer show –self 查看当前项目详细信息【工具】

composer show –self 到底查的是谁的信息?

它查的是当前项目自身(即 composer.json 中定义的 root package)的元数据,不是 Composer 工具本身的版本,也不是已安装依赖的版本 —— 这是最多人混淆的一点。如果你在项目根目录下运行 composer show --self,输出内容完全来自本地 composer.json 文件的字段解析,不读 composer.lock,也不查 vendor/ 里的实际安装状态。

它能显示哪些字段?哪些永远不显示?

能显示的字段取决于你 composer.json 里写了什么,常见有:namedescriptiontypelicenseauthorsrequire(只列约束,如 "php": "^8.1")、autoload 配置等。

  • version 字段即使写了,也大概率不显示 —— Composer 认为 root package 没有“固定版本”,除非你打 git tag 或靠 composer.lock 间接推断
  • 实际安装的依赖版本、插件(plugins)、脚本(scripts 全部键名)、仓库(repositories)配置,统统不会出现
  • require-dev 会列出约束,但不会标注“这是 dev 依赖”;也不会告诉你这些包是否真被装进 vendor/ 了

什么时候该用它?什么时候不该用?

适合快速核对项目基础定义是否写全、命名是否一致、autoload 映射是否按预期声明 —— 尤其在 CI/CD 脚本里做预检时很轻量。

  • ✅ 查 autoload 是否配置了 "app\": "src/",避免 PSR-4 加载失败
  • ✅ 确认 name 字段是否符合私有 Packagist 的命名规范(如 myorg/myapp
  • ❌ 想知道 “guzzlehttp/guzzle 装的是不是 7.5.0?” → 改用 composer show guzzlehttp/guzzle
  • ❌ 想确认当前项目“实际发布版本号” → 它给不了,得看 Git tag 或 composer.lock 里的 packagespackages-dev 条目

composer showcomposer info 的关键区别

composer show --selfcomposer info --self 输出几乎一样,因为 infoshow 的别名;但 composer show(无参数)默认列出所有已安装依赖,行为完全不同。

  • 旧版 Composer(composer.json),composer show --self 会报错 Could not find package with name "self",而不是静默跳过
  • 想查“整个依赖树”,必须用 composer show --tree,加 --self 后这个选项无效
  • 如果误以为 --self 能暴露 Composer 自身版本(比如 2.7.0),那是错的 —— 那是 composer --versioncomposer global show composer/composer 的职责

真正容易被忽略的是:它不反映运行时真实状态。一个 composer.json 写着 "monolog/monolog": "^3.0",但 composer show --self 不会告诉你现在装的是 3.5.0 还是 2.10.0 —— 它只忠于 JSON 文件的文本定义,仅此而已。

text=ZqhQzanResources