composer help 单独运行仅显示顶层命令概览,不展开子命令细节;必须指定具体命令如 composer help require 才能查看 Usage、Arguments、Options、Examples 四区块完整说明,且其行为受项目目录、插件状态和配置上下文影响。

composer help 本身不输出完整参数细节,必须指定具体命令(如 composer help require)才能看到真正可用的选项、参数规则和行为说明。
为什么 composer help 单独运行时信息极少
它只列出命令名和一行简介,不包含任何子命令的 Options 或 Arguments。这不是 bug,是 Composer 的分层帮助设计:顶层只负责导航,细节全在子命令里。
- 当前目录若没有
composer.json文件,可能直接报错Could not find a composer.json file,但加--no-plugins或换到有配置的目录可绕过 - 插件命令(如
composer normalize)不会出现在空help输出中,哪怕已全局安装——它们只在插件注册后才进入上下文 -
composer --help才是查全局开关(如-d、-q、--no-interaction)的正路,composer help不管这些
composer help <command></command> 输出的四个固定区块含义
每条命令的帮助都严格分成 Usage、Arguments、Options、Examples 四块,其中:
-
Usage里的方括号[package]表示可选,尖括号<command></command>表示必填;--no-dev这类无等号的是布尔开关,出现即生效 -
Options中的默认值描述不可全信:比如文档写--no-dev [default: false],但若composer.json里配置了"config": {"platform": {"php": "8.1"}},实际行为可能绕过该默认值判断 -
Examples里的版本约束(如monolog/monolog:^2.0)是真实可执行的,但~1.0和^1.0语义不同,不能互换
哪些参数容易被误用或忽略
帮助里列出来了,但实际行为和直觉常有偏差:
-
--no-update是“只改composer.json,不动vendor/”的关键开关,但composer require --no-update foo/bar后,你得自己再跑composer install才能落地——help 不会提醒这点 -
--dev和--no-dev互斥,同时出现时--dev优先,后者静默失效,不报错也不警告 -
--with-dependencies只在require中有效,在update或install里加会直接报错Unknown option - 路径参数(如包名)必须放在所有选项之后,
composer require --dev monolog/monolog对,composer require monolog/monolog --dev也对,但composer require --dev=monolog/monolog就会被当成把--dev的值设成包名,逻辑崩坏
终端太窄或编码异常导致 help 看不清怎么办
这不是 Composer 的问题,而是终端环境限制:
- Windows CMD 下易因列宽截断长行,建议改用 Windows Terminal 或 Git Bash
- PHPStorm 内置终端可能未正确设置
$COLUMNS,可临时加--format=txt(仅少数命令支持,help自身不认这个参数) - 用管道过滤最实用:
composer update -h | grep -- "--no"(macOS/Linux)或composer update -h | findstr "--no"(PowerShell) - 帮助文本是硬编码在源码里的,断网、没连 GitHub、甚至没装
vendor/autoload.php都不影响查看——它走的是独立 CLI 入口
真正复杂的地方在于:Composer 的帮助系统是上下文敏感的,不是静态清单。同一条命令,在不同目录、不同插件状态、不同 composer.json 配置下,help 显示的选项范围和默认行为都可能变化。别只信文档写的“默认值”,动手试一遍 --verbose 输出才是验证实际路径的唯一方式。


















