新闻中心

如何使用 Composer 并行(parallel)执行多个自定义脚本?

2025-12-08
浏览次数:
返回列表
Composer 本身不支持原生并行执行脚本,但可通过 shell 后台任务(&)、npm-run-all 或 GNU Parallel 实现并发运行;需注意资源竞争、内存占用及交互命令冲突等问题。

如何使用 composer 并行(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,并提供统一的并行/串行语法:

  • 全局或项目内安装:npm install -D npm-run-all
  • composer.json 的 scripts 中添加封装命令:
"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脚本编写基础 中文WORD版 Shell脚本编写基础 中文WORD版

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统

Shell脚本编写基础 中文WORD版 25 查看详情 Shell脚本编写基础 中文WORD版

用 GNU Parallel(Linux/macOS 高级控制)

适合需要精细控制并发数、超时、失败策略等场景:

  • 安装:sudo apt install parallel(Debian/Ubuntu)或 brew install parallel(macOS)
  • 写一个简短的 shell 脚本或直接命令行:
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中文网其它相关文章!


# linux  # js  # git  # json  # node  # php  # 意大利  # 但它  # 不支持  # 如何在  # 自定义  # 如何使用  # u  # app  # npm  # github  # windows  # composer  # 多个  # 常州网站推广优势  # seo.com.cn  # 济南医疗类网站建设  # 关键词seo排名联系q火24星惠  # 深圳百科网站优化如何做  # 南开区产品营销推广软件  # 手机关键词排名优化 s  # 凭祥外贸网站推广  # 内存不足  # 情况下  # 是一个  # seo优化系列之外链  # 重庆企业网站建设学校 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现  《噬血代码2》新预告片发布 展示游戏剧情  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  聚水潭ERP登录页面入口 聚水潭ERP官网登录界面  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  网易大神账号申诉需要多久_网易大神账号申诉流程说明  steam官方入口大全 steam账号注册及操作指南  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  Mac终端命令大全_Mac常用Terminal指令速查  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  Django表单提交验证失败后保持字段值不刷新  绝地鸭卫平a核爆刀流玩法攻略  在python-socketio事件处理器中安全访问Flask应用上下文  如何提高微信支付的安全性_微信支付安全防护与设置建议  lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  处理嵌套交互式控件:前端可访问性指南  在Runstone环境中高效处理TasteDive API的JSON数据  企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  PDF文件体积过大处理_PDF压缩技巧详解  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  新三国志曹操传110级星符试炼夏侯渊极难攻略  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南  海量存储:机器视觉智能化的核心基石  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  微信网页版官方快速登录入口 微信网页版网页版账号直达  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  解决Django多数据库/多Schema环境下外键迁移问题  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  多闪网页版在线观看免费入口_多闪官网访问入口  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  4399免费游戏网址入口 4399小游戏免费入口点开即玩  响应式图片在网页设计中的正确实现方法  Golang并发任务中错误如何聚合_Golang goroutine error收集方式 

搜索