composer 本身不支持原生并行执行脚本,但可通过 shell 后台任务(&)、npm-run-all 或 gnu Parallel 实现并发运行;需注意资源竞争、内存占用及交互命令冲突等问题。

Composer 本身不支持原生并行执行脚本,但可以通过组合系统命令和 Composer 的 run-script 命令 + 并行工具(如 GNU Parallel、npm-run-all 或 shell 的 &)来实现多个自定义脚本的并发运行。
用 shell 后台任务并行启动(最轻量)
适合本地快速验证或简单场景。在 composer.json 中定义好各脚本后,直接在终端用 & 启动多个 composer run-script:
- 确保脚本已定义,例如:
“scripts”: {
“lint”: “phpcs app/”,
“test”: “phpunit –no-coverage”,
“check-types”: “phpstan analyse src/”
}
- 然后运行:
composer run-script lint & composer run-script test & composer run-script check-types & wait
wait 保证终端等待所有后台进程结束,避免提前返回。
用 npm-run-all(推荐跨平台方案)
虽然名字带 npm,但它纯 node 工具,可独立安装使用,支持 windows/macos/linux,并提供统一的并行/串行语法:
“scripts”: {
“lint”: “phpcs app/”,
“test”: “phpunit –no-coverage”,
“check-types”: “phpstan analyse src/”,
“ci:check”: “run-p lint test check-types”
}
运行 composer run-script ci:check 即可并行执行三个脚本。加 -r 可实时输出("ci:check": "run-p -r lint test check-types")。
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统
24 用 GNU Parallel(Linux/macOS 高级控制)
适合需要精细控制并发数、超时、失败策略等场景:
parallel –jobs 3 composer run-script {} ::: lint test check-types
这会最多同时跑 3 个脚本。失败时默认继续,加 --halt now,fail=1 可遇错即停。
注意事项与避坑点
- 并行脚本不能共享同一临时文件、缓存目录或数据库连接,否则可能冲突(如 PHPUnit 和 PHPStan 同时写
phpstan.neon缓存) - 内存敏感型任务(如大型静态分析)并行太多反而拖慢整体速度,建议限制并发数(
--jobs 2更稳妥) - Composer 脚本中若含交互式命令(如
read),并行下会混乱,应避免或改用非交互模式 - CI 环境(如 gitHub Actions)中优先用原生矩阵策略或分步 job,而非强行并行脚本
基本上就这些。不复杂但容易忽略资源竞争和输出混乱问题,先小范围试,再推广到 CI 流程里。
以上就是如何使用 Composer 并行(parallel)执行多个自定义脚本?的详细内容,更多请关注php中文网其它相关文章!