直接运行 composer list 可查看所有内置命令,加 -a 显示别名,--format=json 适合脚本解析;插件命令仅在安装对应插件的项目中可见,版本、安装方式和环境配置均影响命令列表。

composer 命令列表怎么查全
直接运行 composer list 就能看到所有内置命令,包括全局和项目级的。它不依赖当前目录是否含 composer.json,但部分命令(比如 composer install)执行时会检查上下文。
常见误区是以为要先 cd 到项目根目录才能看命令——其实不用。但要注意:如果本地安装了插件(如 hirak/prestissimo 或 roave/security-advisories),它们注册的新命令只在有对应插件的项目中才出现在 list 输出里。
-
composer list --help可以查看list自身的选项,比如--format=json适合脚本解析 - 加
-a(即composer list -a)会显示所有命令,包括带别名的(如create-project和它的别名create) - 某些命令只在特定 Composer 版本存在,例如
composer outdated --direct是 2.2+ 才支持的参数
composer help 怎么查某个命令的详细用法
用 composer help <command>,比如 composer help require。它比 --help 更可靠,因为会走 Composer 内部命令解析逻辑,能正确识别自定义命令和插件命令。
容易忽略的是:帮助内容里写的默认值不一定等于实际行为。比如 composer install --no-dev 的文档说“默认为 false”,但如果你在 composer.json 里写了 "config": {"platform": {"php": "8.1"}}},某些选项的实际生效路径会绕过默认值判断。
- 加
-v(composer help -v require)会显示更详细的参数说明,包括隐式参数(如--with-all-dependencies) - 如果命令不存在,
composer help会报错Command "xxx" is not defined.,而不是静默忽略 - 插件命令的帮助文本由插件自己提供,格式可能不统一,有些甚至没写
help文本
为什么 composer list 显示的命令和官方文档对不上
根本原因是 Composer 分版本、分安装方式、分插件环境。你本地装的是全局 Composer 还是项目内 vendor/bin/composer?用的是 v1 还是 v2?有没有启用 COMPOSER_HOME 下的配置或插件?这些都会影响命令可见性。
典型现象:在 CI 环境里跑 composer list 看不到 composer normalize,但本地可以——大概率是 CI 没装 ergebnis/composer-normalize 插件,或者用了精简版镜像(如 composer:2-alpine 但没预装插件)。
- v1 和 v2 的命令差异不小:
composer global在 v2 中已废弃,改用composer self-update --global配合composer global require -
composer diagnose能帮你快速确认当前环境是否健康,比如是否加载了预期插件、PHP 扩展是否齐全 - 用
which composer和composer --version先锁定实际执行的是哪个二进制、什么版本,比猜靠谱得多
想脚本化调用 composer 命令要注意什么
别直接 parse composer list 的文本输出——格式不稳定,不同版本换行、缩进、颜色控制符都可能变。优先用 --format=json,比如 composer list --format=json | jq -r '.commands[].name'。
另一个坑是权限和工作目录。CI 脚本常在非项目根目录执行 composer install,结果报错 Could not find a composer.json file。这不是命令问题,是路径问题。
- 用
composer --working-dir=/path/to/project install显式指定上下文,比cd /path && composer install更可控 - 所有涉及网络的操作(如
require、update)默认会读COMPOSER_AUTH或auth.json,脚本里记得提前配置好,否则卡住或 401 -
composer show --outdated --direct --format=json返回结构化数据,适合做依赖巡检,但注意--direct在 v2.1 之前不支持
命令行参数的兼容性比你想的更脆弱,尤其跨大版本时。与其硬记哪些参数可用,不如在关键脚本开头加一句 composer --version | grep -q "^Composer version 2\." || exit 1 卡死版本边界。










