执行composer update时如何跳过指定依赖更新?Laravel项目场景
Laravel 5.6升级到5.7时处理无权限访问的私有包问题
问题场景
- 接手的项目基于Laravel 5.6.40,计划逐步升级到5.7.*版本
- 项目依赖
ww/admin、ww/assets等私有包,但无对应仓库的访问权限 - 修改
composer.json中"laravel/framework": "5.6.*"为"laravel/framework": "5.7.*"后执行composer update,Composer要求输入GitHub令牌访问私有仓库,操作中止 - 移除
composer.json中的repositories配置段后再次执行composer update,Composer提示无法解析依赖,指出私有包仅存在于lock文件、不在远程仓库,建议保留本地已安装版本
解决方法
核心思路是将本地已安装的私有包迁移到应用层级的本地目录,让Composer优先使用本地包而非远程仓库:
- 在项目根目录创建
packages目录,再在其中创建对应私有包的厂商目录(比如packages/ww/) - 将
vendor/ww/下的admin、assets等私有包完整复制到packages/ww/目录中 - 修改
composer.json,添加本地仓库配置:
"repositories": [ { "type": "path", "url": "packages/ww/*" } ]
- 确保
composer.json中这些私有包的版本约束和composer.lock文件中的一致,不要随意修改版本号 - 执行
composer update,此时Composer会加载本地packages目录下的私有包,不再尝试访问远程私有仓库,可正常完成Laravel 5.7的升级
补充说明
这种方式相当于把私有包作为本地开发依赖引入,既保留了原有私有包的功能,又规避了对远程私有仓库的访问依赖,适合无权限访问私有仓库但需要升级核心框架的场景。
内容的提问来源于stack exchange,提问作者Petitemo
相关产品推荐
相关产品推荐

