Composer Scripts 是统一管理高频、易错、需环境一致命令的轻量胶水层,通过 composer.json 的 scripts 字段封装测试、静态分析、部署等任务,支持语义化命名、链式执行、PHP 方法调用及事件钩子自动触发,并与 CI/CD 无缝衔接。

Composer Scripts 可以把常用命令封装成可复用的脚本,让测试和部署更轻量、一致且易协作。关键不是写得多,而是把 真正高频、易出错、需环境一致 的步骤交给 composer.json 管理。
在 composer.json 中定义实用脚本
scripts 字段支持任意 shell 命令或 PHP 调用,适合组合 PHPUnit、PHPStan、PHP-CS-Fixer、部署前检查等任务。
- 用 短名称 + 清晰语义 命名,比如
test、test:unit、deploy:staging - 多个命令用分号或
&&连接,失败时自动中断(推荐用&&) - 可调用自定义 PHP 方法,比如
"post-deploy": "My\\Deploy::run",适合复杂逻辑
示例片段:
"scripts": {
"test": [
"@test:unit",
"@test:static"
],
"test:unit": "phpunit --colors=always",
"test:static": "phpstan analyse --level=8 src/",
"fix:cs": "php-cs-fixer fix --dry-run --diff",
"deploy:staging": "git push staging main && ssh deploy@staging 'cd /var/www/app && git pull && composer install --no-dev'"
}
用事件钩子自动触发关键操作
Composer 支持生命周期事件(如 post-install-cmd、post-update-cmd),适合做环境初始化或一致性检查。
-
开发环境装完依赖后自动跑一次静态分析:
"post-install-cmd": "@test:static" - 更新依赖后提醒检查兼容性:
"post-update-cmd": "echo '✅ Dependencies updated. Run @test before commit!'" - 避免误提交未格式化代码:在
pre-commit钩子中调用php-cs-fixer或phpcbf(需配合 git hooks 工具如composer-git-hooks)
与 CI/CD 流水线自然衔接
CI 配置(如 GitHub Actions、GitLab CI)只需调用 composer install 和 composer run test,无需重复写命令细节。
- 所有环境使用同一套脚本,减少“本地能过 CI 报错”问题
- 部署脚本可区分环境:
deploy:staging不清缓存,deploy:prod加上cache:clear和只读模式切换 - 敏感操作(如数据库迁移)建议加确认提示或 require 参数,例如:
"migrate": "php artisan migrate --force"→ 改为"migrate:prod": "php artisan migrate --force",避免误触发
调试与维护小技巧
脚本不是写完就完事,要让它长期可靠。
- 用
composer run -l查看所有可用脚本及其描述 - 加
--no-ansi或-v控制输出粒度,方便 CI 日志排查 - 脚本里避免硬编码路径,优先用
$COMPOSER_HOME或项目内相对路径 - 不推荐在 scripts 里写长循环或交互式逻辑——该抽成独立 PHP 命令行工具
基本上就这些。Composer Scripts 不是替代 CI 或部署平台,而是统一入口、降低协作门槛的轻量 glue layer。










