如何通过一条命令批量更新多个Laravel项目的自定义模块
Laravel多项目自定义模块批量同步更新方案
完全可以实现,以下是3种不同场景下的成熟落地方案:
方案1:封装为Composer私有包(生产环境推荐)
这是Laravel生态最标准的模块化复用方案,操作步骤如下:
- 将开发完成的自定义模块抽成独立代码仓库,完善
composer.json配置:声明命名空间自动加载规则,在extra.laravel.providers字段中注册模块的服务提供者,实现Laravel服务自动发现 - 搭建本地私有Composer仓库(可使用Satis工具,无需公网暴露),也可直接配置本地路径作为Composer源
- 所有Laravel项目的
composer.json中统一添加私有仓库地址,执行一次composer require 你的包名完成首次引入 - 后续模块更新时,仅需在私有包仓库发布新版本,执行提前写好的批量脚本遍历所有项目目录执行
composer update 你的包名 --no-interaction即可自动完成更新,脚本可同时追加php artisan migrate、php artisan vendor:publish等必要命令
方案2:软链接+批量脚本(开发环境推荐)
适合模块还在高频迭代、不想每次更新都打Composer版本的开发阶段:
- 将自定义模块代码存放在所有Laravel项目的上级公共目录,仅维护这一份代码
- 首次配置时,在每个项目的模块存放路径(默认一般是
app/Modules/)下创建软链接指向公共目录的对应模块文件,修改公共目录的代码会实时同步到所有项目 - 编写简单的批处理脚本,遍历所有项目执行配置清理、迁移执行、静态资源发布等项目侧的单独操作,不需要逐个进入项目执行
方案3:CI/CD流水线触发(已做统一部署的场景推荐)
如果你的所有项目已经有统一的CI/CD部署流程,直接在流水线中加入模块拉取步骤即可:
- 将自定义模块代码托管到内部代码仓库
- 修改所有项目的CI/CD配置文件,加入构建前拉取最新模块代码、放到项目对应目录的步骤
- 模块更新后直接触发所有项目的流水线执行,即可自动完成所有项目的模块更新和重新部署
注意事项
- 模块如果存在项目维度的差异化配置,需将配置文件通过
vendor:publish发布到各项目的config/目录,不要硬编码到模块代码中避免配置冲突 - 批量更新前建议提前对所有项目做代码或数据库快照备份,避免模块版本兼容问题导致项目故障
- 若部分项目不需要跟随最新版模块,可在
composer.json中固定包的版本号,不会被强制更新
内容的提问来源于stack exchange,提问作者Owais Iqbal
相关产品推荐
相关产品推荐

