答案是先运行composer update --dry-run -v定位冲突包,再用composer require重新添加依赖;不可手动编辑composer.lock,否则破坏哈希校验致install失败。

composer.json 合并冲突后 install 失败怎么办
直接删 vendor/ 和 composer.lock 并不能解决问题,反而会掩盖真实约束矛盾。合并分支时若两个 composer.json 对同一包有互斥要求(比如一个写 "monolog/monolog": "^2.0",另一个写 "monolog/monolog": "1.26.1"),Composer 会在 install 阶段直接报 found x packages with version constraints that differ。
正确做法是:
- 先运行
composer update --dry-run -v,看它在哪个包上卡住、输出的Conclusion段落里明确列出谁在封杀哪个版本 - 接受改动较多的分支的
composer.json,然后用composer require vendor/package重新添加另一分支引入的依赖(不是手动改 JSON) - 避免手动编辑
composer.lock:它由 Composer 自动生成,手改极易破坏哈希校验,导致后续install失败
composer.lock 文件出现
这是 Git 合并时未解决的文本冲突,composer install 会直接拒绝执行,报错类似 Invalid lock file format 或解析 JSON 失败。
不要尝试手动删掉冲突标记再保存——composer.lock 是二进制安全敏感文件,结构稍有偏差就会校验失败。
推荐操作:
- 运行
composer update --lock:它会丢弃当前冲突的 lock 文件,基于当前composer.json重新生成一份完整、合法的新 lock - 如果想保留部分旧依赖版本,先用
composer show --tree | grep package-name确认实际安装路径,再针对性运行composer update vendor/package --with-dependencies - 团队协作中,必须提交更新后的
composer.lock,否则别人install时仍会失败
全局镜像配置被项目级 repositories 覆盖
你明明用 composer config -g repo.packagist https://mirrors.aliyun.com/composer/ 配好了国内镜像,但 composer install -vvv 日志里却反复出现 packagist.org 或 codeload.github.com ——这不是网络问题,是项目级 composer.json 里的 "repositories" 字段静默屏蔽了全局配置。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
Composer 的源优先级是硬性覆盖:项目级 > 全局 > 默认源,没有协商机制。
快速验证和修复:
- 运行
composer config repositories,看输出是否为空;若非空,说明项目级已定义源 - 检查
composer.json是否存在"repositories"键,哪怕值是[]或{"packagist.org": false},都会使全局镜像失效 - 临时禁用:
composer config --unset repositories(注意不加-g) - 如需共存私有源和镜像,必须显式声明:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},且末尾必须带/
COMPOSER_HOME 路径错配导致配置“没生效”
你在终端执行 composer config -g repo.packagist 输出正常,但 CI/CD 或宝塔里跑 composer install 仍走官方源——大概率是 PHP 进程用户和配置用户不一致。
例如你用 root 配置,但 Web 服务器以 www-data 用户运行,它读的是 /var/www/.composer/config.json,而不是你配的 /root/.composer/config.json。
关键检查点:
- 运行
composer config --global home,确认输出路径是否与当前运行 Composer 的用户实际可访问的$HOME/.composer一致 - Linux/macOS 下执行
echo $COMPOSER_HOME,看是否被父进程(如 Docker、宝塔脚本)错误覆盖 - Docker 构建时,应在
USER www-data后再执行composer config -g,而非用sudo - 宝塔面板中,PHP 脚本开头加
export COMPOSER_HOME=/home/www/.composer

















