composer help 显示上下文敏感的命令列表,会根据当前目录(如是否有 composer.json)和已安装插件动态过滤,init、create-project 等初始化命令仅在空目录可见,插件需通过 composer global update 激活才显示,self-update 不出现于 help 中。

composer help 能看到哪些命令?为什么有些命令不显示
直接运行 composer help,你看到的是一份「上下文敏感」的命令列表,不是固定不变的全集。它会根据当前目录状态动态过滤:比如你在已有 composer.json 的项目根目录里执行,create-project 和 init 就不会出现——因为这两个命令语义是“从零开始”,Composer 认为它们在此场景下不适用。
想看到全部初始化类命令?换到一个空目录再试。另外,全局安装的插件(如 composer-normalize)必须先确保已通过 composer global update 拉取并激活,否则也不会出现在 help 列表中。
-
composer self-update永远不会列在help输出里——它是内置逻辑,不是标准 Console 命令 -
composer list和composer help功能高度重合,但list更轻量,适合快速扫一眼;help则带简短描述,更适合初查 - 某些命令(如
dump-autoload)在帮助里只写dumpautoload,但实际两种写法都支持,这是 Symfony Console 的别名机制
怎么查某个具体命令的用法,比如 require 或 update
别去翻网页文档,本地终端一条命令就能拿到最准、最及时的说明:composer help require。它会清晰列出所有参数类型、选项含义和典型示例,而且和你当前 Composer 版本完全一致。
注意括号语法的含义:[package] 是可选参数,<package></package> 是必填位置参数,[--dev] 是开关型选项,[--version=VERSION] 是带默认值的可选值。比如 composer require guzzlehttp/guzzle:^7.5 中的 ^7.5 必须带约束符,写成 7.5 会被解释为精确匹配 ==7.5.0,极大概率失败。
- 加
--format=json或--format=markdown可导出结构化帮助,但日常几乎用不到,仅限脚本集成或调试时需要 -
composer help update会告诉你默认行为是“只更新 lock 文件中已有的包”,不会自动拉composer.json新增的依赖——这点不看 help 很容易误以为update等价于“全量同步” - 想静默执行(跳过所有提示,包括安全警告),所有命令都支持
--no-interaction,但 help 文档通常只在init这类明显交互式命令里强调它
常见错误:为什么我敲了命令却提示“command not found”
不是拼错了,也不是没装好,大概率是命令根本不在当前上下文里。例如在项目目录下输入 composer create-project laravel/laravel blog,会报错说找不到该命令——因为 create-project 是全局初始化命令,不能在已有项目的根目录里调用。
另一个高频原因是插件未就绪:composer normalize 看似是个标准命令,但其实是第三方插件。如果你只运行过 composer global require composer-normalize,却没再跑一次 composer global update,它就不会被注册进命令系统,help 里自然也看不到。
- 检查是否在正确目录:初始化类命令(
init、create-project)请确保 pwd 是空目录或非项目目录 - 确认插件已加载:运行
composer global show查看已安装的全局包,再确认对应命令是否在help列表中 -
composer self-update不会出现在 help 里,但它是真实可用的;而composer install在无composer.lock时会自动触发一次update——这个隐含行为 help 里也不会明说,但直接影响部署一致性
真正有用的 help 使用习惯
别把 composer help 当成一次性查阅动作。它最实用的姿势是“按需即查+参数验证”:写完一条命令前,先 composer help <command></command> 确认参数顺序、选项写法,尤其注意哪些是必填、哪些有默认值。很多版本冲突、安装失败,根源只是传错了参数类型(比如把 --dev 写成 --development)或者漏了约束符。
还有个容易被忽略的点:help 不会告诉你某些关键副作用。比如 composer require --dev phpunit/phpunit 不仅装包,还会修改 composer.json、更新 composer.lock、执行安装三步合一;而 composer update monolog/monolog 默认只升这一个包,但若你忘了加 --with-dependencies,它的子依赖可能卡在旧版,导致运行时报错。
复杂点在于,这些行为不是 bug,是设计使然——Composer 的 help 是给“理解上下文的人”看的,不是给“第一次接触的人”写的入门指南。所以每次不确定,就敲一下 help,比猜强得多。










