composer help不输出内容是因为不在有效上下文(如缺composer.json文件);查全局命令用composer list,查具体命令用composer help ,插件命令需先安装,帮助文本硬编码本地无需网络。

composer help 不输出内容?不是命令坏了,而是你不在有效上下文里——要么缺 composer.json 文件,要么想查的命令根本不在当前场景中。
为什么 composer help 什么也不显示
执行 composer help 后空白或报 Command 'help' is not defined,大概率是因为当前目录下没有 composer.json(哪怕空文件也行)。Composer 的部分子命令帮助页是「上下文敏感」加载的,没这个文件就不初始化对应命令逻辑。
- 快速补救:
touch composer.json(Linux/macOS)或type nul > composer.json(Windows CMD)建个空文件再试 - 若只想看全局命令列表,直接用
composer list——它不依赖项目文件,更轻量、更稳定 - 插件命令(如
composer normalize)必须先通过composer require --dev composer-normalize安装,否则连命令名都不会出现在help或list里
查具体命令用法:别只输 composer help
composer help 不加参数时只列命令名和一行简介,真正有用的细节全在子命令的帮助页里。比如你想确认 install 能不能跳过 autoload 优化,光扫列表是找不到 --optimize-autoloader 的。
- 正确姿势:
composer help install或等价的composer install -h - 输出分三块:
Usage(调用格式)、Arguments(位置参数)、Options(开关参数),重点盯Options - 注意参数归属:例如
--dry-run只在update和require中有效,install不支持,硬加会报错 - 括号含义要分清:
[package]是可选,<package></package>是必填,[--dev]是布尔开关,[--version=VERSION]是带默认值的可选项
哪些命令根本不会出现在 help 输出里
Composer 会按当前目录状态动态过滤命令列表,这不是 bug,是设计行为。
-
create-project和init只在空目录或无composer.json的目录中可见;已有项目的根目录里它们被自动隐藏 -
self-update永远不会出现在help或list输出中——它是内置逻辑,不是 Symfony Console 注册的标准命令 - 全局插件命令(如
composer global require安装的)需先运行composer global update激活,否则 help 不识别 -
dump-autoload在 help 里可能写作dumpautoload,这是 Symfony Console 别名机制,两种写法都行
断网、没装插件、甚至没连 GitHub 也能查帮助吗
能。Composer 的所有帮助文本都硬编码在源码里,来自 vendor/composer/composer/src/Command/ 下各 Command 类的 configure() 方法中 setHelp() 设置的内容。
- 不需要网络,不依赖 Packagist 或 GitHub
- 不需要
vendor/autoload.php已加载,composer help是独立 CLI 入口 - 但插件命令的帮助只有插件安装并注册后才可用,没装就看不到对应条目
- 某些选项(如
--no-cache)的行为文档没写透,实际会影响cache/目录读写逻辑,调试时建议搭配--verbose观察真实路径
最常被忽略的一点:help 文本里不会告诉你 composer update 默认只更新 composer.lock 中已有的包,不会拉 composer.json 新增的依赖——这个关键行为得自己试出来,或者翻源码注释。


















