临时配置仅对当前命令生效,需用-r参数指定镜像并-vvv验证请求URL;项目级config需检查composer.json、diagnose输出及show日志;环境变量优先级最高,会覆盖所有配置。

临时配置只对当前命令生效,不能靠 config 命令查
Composer 没有“运行时传参式”的临时配置。所谓临时,是指用 composer config 不加 -g 参数写入当前项目 composer.json 的 config 字段——它只影响这个目录下的后续命令,换个项目就失效。但关键点是:composer config repo.packagist(不加 -g)查的是项目级显式配置,不是“当前命令是否用了临时源”。你改了配置文件,再执行 composer install,它自然就读;但如果你只是想验证某次 install 是否真走腾讯云镜像,得看网络行为本身。
验证 -r 参数是否生效:看日志里下载地址
用 -r 临时指定镜像(如 composer install -r https://mirrors.cloud.tencent.com/composer/)后,最直接的验证方式是加 -vvv 看实际请求 URL:
- 运行
composer install -r https://mirrors.cloud.tencent.com/composer/ -vvv 2>&1 | grep "Downloading https" - 输出中必须出现
https://mirrors.cloud.tencent.com/composer/packages.json或类似路径,而不是packagist.org - 如果没看到,说明
-r被忽略——常见原因是项目composer.json中存在repositories字段(哪怕空对象{}),它会屏蔽-r
验证项目级 config 字段是否被读取:用 diagnose 和 show
当你通过 composer config http-proxy http://127.0.0.1:8080(无 -g)写入项目配置后,不能只信 composer config http-proxy 输出,要交叉验证:
- 先确认
composer.json里确实多了"config": {"http-proxy": "http://127.0.0.1:8080"} - 运行
composer diagnose,检查输出中 “HTTP proxy” 行是否显示你设的地址 - 再跑
composer show laravel/framework --no-ansi -vvv 2>&1 | head -n 10,观察是否有Connecting to ...或Downloading日志指向代理地址 - 若
diagnose显示 proxy 为空,但config命令能查到值,说明项目composer.json格式有误(比如 BOM 头、注释、逗号缺失)
容易被忽略的覆盖优先级:环境变量 > 项目配置 > 全局配置
即使你确认 composer.json 里写了 config,也写了 repositories,甚至 composer config -l 显示正常,仍可能不生效。因为环境变量拥有最高优先级:
- 检查
env | grep COMPOSER_(Linux/macOS)或echo %COMPOSER_HTTP_PROXY%(Windows) - 若有输出,比如
COMPOSER_REPO_PACKAGIST=https://packagist.org,它会直接覆盖所有配置项,包括-r - 临时禁用只需
unset COMPOSER_REPO_PACKAGIST(Linux/macOS)或set COMPOSER_REPO_PACKAGIST=(Windows cmd) - 验证时务必在干净 shell 中操作,避免继承父进程的干扰变量
网络请求没走预期地址,八成不是 Composer 配置问题,而是环境变量、项目级 repositories 屏蔽、或 JSON 文件格式损坏——先查这三处,比反复改配置更省时间。











