执行composer update后composer.lock异常,如何将predis移至require区?
嘿,我来帮你搞定这个问题!首先得明确一个核心点:composer.lock完全是跟着你的composer.json配置生成的,所以要修正lock文件里的包位置,得先把根配置捋对,再同步lock文件就行。具体操作步骤如下:
检查并修正composer.json
打开你的composer.json文件,找到require-dev区块,把predis/predis这一行移到require区块里。如果它本来就在require里,那大概率是之前执行命令时的意外问题,直接跳到下一步即可。给你个修正后的示例片段参考:
{ "require": { "predis/predis": "^2.0" // 确保这个包在这里 }, "require-dev": { // 这里放phpunit、phpcs这类开发工具依赖,别放predis } }重新生成正确的composer.lock文件
执行下面的命令,让Composer根据修正后的composer.json更新lock文件:composer require predis/predis这个命令会自动确认composer.json里的依赖配置,同时更新composer.lock,确保predis/predis出现在
require区域里。如果你需要指定特定版本,可以加上版本号,比如composer require predis/predis:^2.0。要是你担心影响其他依赖,也可以只同步这个包的lock信息:
composer update predis/predis --lock提交并推送到Heroku
把修改后的composer.json和composer.lock都提交到Git仓库,然后推送到Heroku:git add composer.json composer.lock git commit -m "Move predis/predis from require-dev to require in composer config" git push heroku mainHeroku会根据新的composer.lock文件安装依赖,这时predis/predis就会作为生产依赖被正确加载了。
为什么会出现这个问题?
一般来说,要么是之前误执行了composer require --dev predis/predis把包加到了开发依赖,要么是更新依赖时Composer根据某些依赖关系意外调整了它的位置,但核心解决思路都是先把composer.json的配置改对,再同步lock文件就好。
内容的提问来源于stack exchange,提问作者Clark

