如何使用Composer run-script –list查看当前项目定义的所有脚本?

16次阅读

执行 composer run-script –list 无输出,是因为 composer.json 中缺少或拼写错误 scripts 字段(如误为 script),该命令仅识别顶层 scripts 对象,忽略 scripts-descriptions 等其他字段。

如何使用Composer run-script –list查看当前项目定义的所有脚本?

执行 composer run-script --list 为什么没输出?

多数情况下,运行该命令后终端一片空白,不是脚本不存在,而是 Composer 默认只显示 "scripts" 中顶层定义的脚本(即不嵌套在 "scripts-descriptions" 或其他自定义键下的内容),且要求 composer.json 中必须存在 "scripts" 字段——哪怕它是空对象也会触发列表输出。如果字段缺失或拼写错误(如写成 "script"),命令就静默退出。

  • 确认 composer.json 包含 "scripts": {} 或至少一个键值对,例如:
    "scripts": {   "dev": "php -S localhost:8000 -t public" }
  • 不要依赖 "scripts-descriptions":这个字段仅用于 composer list 显示说明,run-script --list 完全忽略它
  • 注意权限和路径:确保在项目根目录下执行,且当前用户对 composer.json 有读取权限

composer run-script --list 输出的格式与含义

当命令正常工作时,输出是纯文本两列:左侧为脚本名(key),右侧为对应命令(value),中间用两个空格分隔。它不会显示别名、钩子(如 pre-autoload-dump)或事件监听脚本,只列出显式定义在 "scripts" 下的条目。

  • 脚本名支持中划线(test:unit)、冒号分隔(phpcs:fix),但不能含空格或未转义的引号
  • 若 value 是数组(多条命令),--list 只显示第一个元素(Composer v2.5+ 开始支持数组脚本,但 --list 仍不展开)
  • 输出不含颜色或样式,无法通过参数开启高亮

替代方案:快速查看所有可运行脚本(含事件钩子)

想看到更完整的脚本视图(包括 post-install-cmd 这类生命周期事件),composer run-script --list 不够用。直接读取 JSON 更可靠:

  • jq 查看全部:
    jq '.scripts' composer.json
  • 过滤出非空脚本(排除注释或空字符串):
    jq 'with_entries(select(.value != null and .value != ""))' composer.json
  • 人工检查常见钩子:打开 composer.json,搜索 "pre-""post-""auto-" 等前缀,它们虽不列在 --list 中,却会在对应事件触发时自动执行

为什么有些脚本在 --list 里出现,但 composer run-script xxx 报错?

列表只是“声明存在”,不代表能立即执行。常见断裂点:

  • 命令本身不存在:比如写了 "cs": "phpcs",但系统未安装 phpcs CLI,或不在 $PATH
  • 路径上下文错误:脚本中用了相对路径(如 "test": "php tests/run.php"),但执行时工作目录不是项目根,导致文件找不到
  • 环境变量缺失:某些脚本依赖 $_ENV['app_ENV'].env 文件,而 run-script 默认不加载它们(除非脚本自己调用 dotenv
  • PHP 版本不兼容:脚本调用的函数在当前 PHP 版本中被弃用或移除(如 create_function()

真正要验证脚本是否可用,得单独运行一次并观察 stderr 输出,而不是只信 --list 的存在性。

text=ZqhQzanResources