安装-dev版本运行单元测试时如何通过composer排除backpack-devtools?
针对Laravel Backpack devtools CI环境免安装的解决方案
方案1:使用Composer自定义依赖分组(最优解)
Composer 2.2及以上版本支持自定义Dev依赖分组,可将backpack-devtools单独归为仅本地使用的分组,CI环境安装依赖时直接排除该分组即可完全不引入该包:
- 修改项目根目录的
composer.json,将backpack-devtools从默认的require-dev中移出,配置为独立的本地依赖分组:
{ "require-dev": { // 保留CI环境需要用到的通用开发依赖,例如phpunit、pint等 "phpunit/phpunit": "^10.0" }, "extra": { "dev-package-groups": { "local-only": [ "backpack/devtools" ] } } }
- 本地开发环境正常执行
composer install即可自动安装该分组下的所有包 - CI环境执行依赖安装命令时添加排除参数,跳过该分组的安装:
composer install --no-dev-group=local-only
该方案无需修改业务代码,也无需在CI中配置backpack-devtools的许可证密钥,完全符合需求。
方案2:CI环境临时移除依赖(兼容低版本Composer)
如果你的Composer版本低于2.2,不支持自定义依赖分组,可以在CI执行脚本中先临时移除该依赖再执行安装:
- 在CI的依赖安装步骤前添加如下命令,只会修改CI临时环境的composer配置,不会影响本地代码仓库:
composer remove --dev backpack/devtools --no-update composer install
额外兼容配置
如果项目中已经写了backpack-devtools相关的服务提供者注册或者配置代码,建议添加环境判断,避免CI环境运行时报类不存在错误:
// 例:在AppServiceProvider的register方法中添加判断 if ($this->app->environment('local')) { $this->app->register(\Backpack\DevTools\DevToolsServiceProvider::class); }
内容的提问来源于stack exchange,提问作者hey
相关产品推荐
相关产品推荐

