运行 composer config -g -l 直接输出 Composer 运行时合并生效的全局配置,自动跳过无效 JSON 或错误路径;加 --verbose 可确认实际读取的配置文件路径。

运行 composer config -g -l 查看最终生效的全局配置
这个命令直接输出 Composer 运行时实际采用的全局配置,不是某个 JSON 文件的原始内容。它自动合并了 ~/.config/composer/config.json、~/.composer/config.json 和环境变量(如 COMPOSER_HOME)的影响,跳过所有语法错误或路径无效的项。
加 --verbose 能看到它到底读了哪个文件:composer config -g -l --verbose。如果输出顶部显示 “Global configuration file” 路径和你预期不符,说明配置没落进正确位置。
常见误操作:
- 手动编辑
~/.composer/config.json但系统实际读的是~/.config/composer/config.json(新版 Composer 优先级更高) - JSON 文件里用了中文引号、多逗号、末尾逗号,导致整个文件被静默忽略
- 改完没重启终端,shell 仍缓存旧的
COMPOSER_HOME值
验证镜像源是否真走腾讯云(或其它自定义源)
只看 composer config -g repo.packagist 输出是 JSON 不够,得确认网络请求真发到了镜像站。
执行:composer show laravel/framework --no-ansi | head -n 3,然后搜响应头或 URL 里有没有 mirrors.cloud.tencent.com。如果还是 packagist.org 或超时,说明配置没生效或缓存没清。
必须同步做两件事:
-
composer clear-cache:否则 Composer 仍用旧缓存里的 packages.json 快照 - 确认
repo.packagist的值是完整 JSON 对象:{"type": "composer", "url": "https://mirrors.cloud.tencent.com/composer/"},不是字符串、不缺type字段、url末尾有斜杠
检查 COMPOSER_HOME 是否被错误覆盖
一旦设了 COMPOSER_HOME 环境变量,Composer 就完全不管默认路径,所有全局操作(global require、缓存、配置)都转向该路径。设错一个字符,laravel 命令就找不到,autoload 也不生效。
验证方式:
- 运行
composer config --list --global,看 “Global configuration file” 路径是否与你设的COMPOSER_HOME一致 -
COMPOSER_HOME必须是绝对路径,不能含~或$HOME;Windows 下不能用%APPDATA% - Linux/macOS 改完要
source ~/.zshrc或新开终端;Windows 要确认是用户级变量且已重启 CMD/PowerShell
时间偏差会导致配置“看起来生效”但实际校验失败
系统时间比 Packagist 服务器时间快或慢超过 15 分钟,Composer 会在签名验证阶段直接中止,报 signature verification failed。此时即使镜像源、COMPOSER_HOME 全对,composer install 也会卡在 “Loading composer repositories…”。
快速判断:
- 运行
date记下本地时间 - 运行
curl -I https://packagist.org 2>/dev/null | grep -i date提取响应头时间 - 两者差值 >15 分钟 → 就是它
修复后别忘了:rm -rf vendor composer.lock + composer clear-cache,否则旧锁文件里的哈希时间戳仍会触发失败。


















