最常见原因是composer.json缺失scripts字段或拼写错误;--list仅显示顶层scripts对象中的键名,不包含生命周期钩子或scripts-descriptions内容。

composer run-script --list 为什么没输出?
最常见原因是当前目录下 composer.json 根本没有 scripts 字段,或拼写错误(比如写成 script、scripts-descriptions)。Composer 只识别顶层的 "scripts": {} 对象,其他字段全被忽略。
- 检查
composer.json是否存在且格式合法:用jq '.' composer.json或打开文件确认有"scripts"键 - 注意空对象也合法:
"scripts": {}不会报错,但--list仍无输出 - 别指望
scripts-descriptions能让脚本出现在列表里——它只影响composer list的说明文字,和run-script无关 - 如果刚改了
composer.json,确保没残留语法错误(如末尾多逗号),否则 Composer 会静默跳过整个scripts块
哪些脚本会被 --list 列出来?
composer run-script --list 只显示显式定义在 scripts 对象里的键名,不包括生命周期钩子(如 post-install-cmd)或事件监听器。
- ✅ 显示:
"test": "phpunit"→test会出现在列表中 - ✅ 显示:
"build": ["npm ci", "npm run build"]→build仍会列出(v2.5+ 支持数组,但--list只取键名) - ❌ 不显示:
"post-update-cmd": "composer dump-autoload"—— 这是自动触发的钩子,不是可手动运行的脚本 - ❌ 不显示:
"pre-autoload-dump"、"phpstan:analyse"(除非你把它明确定义在scripts里)
想看全部脚本(含钩子和注释)怎么办?
靠 --list 不够,得直接读配置。终端里一行命令就能看清真实结构:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
jq '.scripts' composer.json
如果只想过滤出非空、非注释的脚本(排除 null、空字符串或纯注释值):
jq 'with_entries(select(.value != null and .value != ""))' composer.json
- 手动搜索更直观:在
composer.json里Ctrl+F查"pre-、"post-、"auto-,这些钩子虽不列在--list中,却会影响 install/update 行为 - 注意路径上下文:脚本里写的
"php tests/AllTests.php"只在项目根目录执行才有效;进子目录再跑composer run test就可能报错找不到文件 - 命令本身是否可用,和是否列在
--list无关。比如"cs": "phpcs"列出来了,但系统没装phpcs或不在$PATH,照样执行失败
为什么我在项目里跑了 --list 却看不到 Laravel 的 artisan 脚本?
因为 artisan 不是 Composer 脚本,它是 Laravel 自己的 CLI 工具。你在 composer.json 里看到的 "serve" 或 "test" 是包装器,真正调用的是 php artisan serve 这类命令。
- Composer 脚本只是 shell 命令的快捷方式,不参与框架逻辑
- 如果
composer.json里没定义"serve",那composer run serve就不存在,哪怕artisan serve本身能跑 - 别混淆
composer run-script和php artisan:前者由 Composer 解析执行,后者由 Laravel 内核解析,两者加载机制、参数传递、错误提示完全不同
真正容易漏掉的,是钩子脚本的存在本身——它们从不列在 --list 里,却在每次 composer install 后悄悄执行。查 composer.json 比依赖命令输出更可靠。










