composer show --self 仅显示当前项目 composer.json 定义的 root package 元数据,如 name、description、require 等,不显示 version、实际安装版本、插件或脚本配置。

composer show --self 显示的是当前项目的 root package 信息
它不显示已安装依赖的详情,只聚焦于 composer.json 中定义的本项目自身(即 root package)的元数据。这个命令本质是读取当前项目 composer.json 的内容并格式化输出,不是运行时状态快照。
它能查到的字段取决于 composer.json 的实际定义
常见可显示项包括:name、description、type、license、authors、require 和 require-dev(仅列出约束,不含已安装版本)、autoload 配置等。但以下内容不会出现:
-
version字段:即使写了也不会显示 —— Composer 认为 root package 没有“固定版本”,除非你用composer install --no-dev+composer.lock锁定,否则它默认是dev-main或类似占位符 - 实际安装的依赖版本:那是
composer show(不带--self)或composer list的职责 - 插件或脚本配置(如
scripts):这些字段被忽略,不参与输出
和 composer info --self 的区别在哪?
两者输出几乎一致,因为 composer info 是 composer show 的别名。但注意:composer show --self 在 Composer 2.2+ 中更稳定;旧版本中若项目未初始化(无 composer.json),它会报错 Could not find package with name "self",而不是静默失败。
composer show --self name : myapp/api-service descrip. : Internal REST API for user management type : project license : MIT authors : John Doerequire : php: ^8.1, guzzlehttp/guzzle: ^7.5 autoload : psr-4: {"App\\": "src/"}
真正想查“当前项目实际用了哪些包和版本”该用什么?
别依赖 --self。直接运行:
-
composer show:列出所有已安装依赖及其版本 -
composer show -t:加树形结构,看清依赖层级 -
composer show myapp/api-service(显式指定 name):此时才可能看到解析出的 version(来自composer.lock的packages段落),但前提是 lock 文件存在且该 package 被当作依赖记录了 —— 这种用法非常规,容易误判
root package 的“真实版本”本质上由 Git tag、VCS 分支或 composer.lock 中的 packages-dev 条目间接体现,show --self 不负责揭示这点。










