composer run-script --list 仅列出 composer.json 中 scripts 字段显式定义的脚本名(键),要求该字段存在且为合法 JSON 对象(如 "scripts": {} 或含键值对),缺失、拼写错误(如 script)、非顶层或语法错误均导致静默无输出;输出为两列纯文本,左为脚本名、右为命令,不显示描述、不展开数组、不包含未绑定的内置事件。

直接运行 composer run-script --list 就能列出当前项目定义的所有自定义脚本,但前提是 composer.json 里必须有合法的 scripts 字段——缺了它,命令就静默退出,不是没脚本,是压根没识别到配置。
为什么 composer run-script --list 没输出?
最常见原因是 composer.json 中缺失 scripts 键,或拼写错误(比如写成 script 或 "scripts ": 多了个空格)。Composer 只扫描顶层 "scripts": { ... } 对象,其他字段如 scripts-descriptions 完全不参与识别。
-
scripts必须是 JSON 对象,哪怕空对象{}也能触发列表输出 - 字段名大小写敏感:
Scripts或SCRIPTS都无效 - 在项目根目录外执行该命令,可能因找不到
composer.json而无响应 - 某些 IDE 或编辑器保存时自动删掉末尾逗号或加 BOM,导致 JSON 解析失败,
--verbose可暴露这类警告
composer run-script --list 输出内容怎么看?
正常输出是两列纯文本:左侧是脚本名(key),右侧是对应命令(value),中间用两个空格分隔。它不显示颜色、不支持分页,也不展开数组值(若 value 是数组,只显示第一个元素)。
- 脚本名可含冒号和中划线(如
test:unit、phpcs:fix),但不能含空格、未转义引号或 Unicode 控制字符 - 生命周期钩子(如
post-install-cmd)会列出,但它们是 Composer 内置事件,不是你定义的“自定义脚本” -
scripts-descriptions字段仅影响composer list显示,对run-script --list无任何作用
如何让自定义脚本带描述?
原生 composer run-script --list 不支持描述字段。真正可行的方式只有两种:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 升级到 Composer 2.2+,并在
composer.json中同时定义scripts和scripts-descriptions,但注意:这只会让composer list显示描述,run-script --list仍只输出原始两列 - 在脚本值里手动加
echo提示,例如:"test": "echo '▶ Running PHPUnit...'; php vendor/bin/phpunit"—— 描述只是运行时打印,不参与元数据管理
别指望靠这个实现文档化;脚本用途、依赖、执行顺序这些信息,得靠团队约定或写进 README.md,Composer 不管。
想看更全的脚本视图?--list 不够用
composer run-script --list 只展示 scripts 下显式定义的条目,不包括:
- 事件钩子的完整执行链(比如
pre-autoload-dump是否被某插件注册) - 全局安装的插件提供的脚本命令(如
laravel:optimize) - 通过
composer.json的extra或第三方扩展动态注入的脚本
如果发现某个脚本明明写了却跑不起来,大概率不是 --list 没列出来,而是执行路径、PHP 版本、vendor 二进制缺失或 Windows 下 shell 兼容性问题——这时候要盯的是 composer run test -v 的详细报错,而不是反复刷新 --list 输出。

















