composer中如何查看所有的脚本列表_composer run-script –list用法【教程】

11次阅读

运行 composer run-script –list 仅当项目根目录存在含 “scripts” 键(即使为空对象)的 composer.json 时才显示脚本;若无该键、路径错误、使用全局 Composer 或脚本名含非法字符,则静默不输出;事件钩子如 post-install-cmd 会列出,但仅纯字母数字下划线命名的才是可手动执行脚本。

composer中如何查看所有的脚本列表_composer run-script –list用法【教程】

直接运行 composer run-script --list 就能列出所有已定义的脚本,但前提是项目根目录下存在 composer.json 且其中包含 "scripts" 字段。

为什么 composer run-script --list 有时不显示任何内容

常见原因不是命令错了,而是脚本没定义或路径不对:

  • composer.json 文件里压根没有 "scripts" 这个键(哪怕值是空对象 {},也得存在)
  • 当前工作目录不是项目根目录,composer 找不到正确的 composer.json
  • 用了 composer global 或其他作用域,但 --list 只读取当前项目的配置
  • 脚本名含非法字符(如空格、斜杠),Composer 会跳过解析,也不报错,只是不显示

如何确认脚本是否真的被识别

别只信 --list 的输出,直接查 composer.json 更可靠:

{     "scripts": {         "dev": "php -S localhost:8000 -t public",         "test": [             "@php vendor/bin/phpunit",             "@phpstan"         ],         "post-install-cmd": "chmod +x bin/*"     } }

注意:post-install-cmd 这类事件钩子也会出现在 --list 结果里,但它们不是手动触发的「命名脚本」;只有键名是纯字母/数字/下划线的才会被列为可执行脚本(比如 devtest)。

composer run-script 的实际调用细节

运行脚本时,Composer 会自动注入一些环境变量,并支持前置/后置钩子:

  • 脚本内可用 $COMPOSER_BIN_DIR 获取 vendor/bin 路径
  • --no-dev 会导致 dev 类脚本里的 vendor/bin/xxx 命令找不到(因为未安装 dev 依赖)
  • @php 前缀可强制使用 Composer 内置 PHP 解释器路径,避免系统 PHP 版本不一致问题
  • 如果脚本数组里某条命令失败(非零退出码),默认会中断后续命令 —— 加 --no-interaction 不影响这个行为,得靠 || true 显式忽略

真正容易被忽略的是:脚本列表不反映执行顺序,也不体现依赖关系;"test" 里写了两行命令,--list 仍只显示一行 test。想看完整执行链,得打开 composer.json 自己数。

text=ZqhQzanResources