composer config -g repo.packagist 输出 JSON 不代表真生效,必须通过 composer diagnose 查看“Repo packagist.org”行或执行 composer require -vvv | grep packages.json 观察实际请求URL来验证,否则可能因键名错误、缺斜杠、项目级repositories覆盖等原因静默回退至官方源。

composer config -g repo.packagist 输出不等于真生效
很多人执行 composer config -g repo.packagist 看到 JSON 就以为镜像配好了,其实这只是“你写了什么”,不是“Composer 正在用什么”。它完全不校验 URL 是否可访问、格式是否合法、字段名有没有拼错。比如写成 repos.packagist 或漏掉末尾 /,命令照样返回空或旧值,但实际请求时会静默 fallback 到 packagist.org。
真正验证必须走一次真实网络请求
运行以下命令组合,观察日志中实际发起的 URL:
composer clear-cachecomposer require monolog/monolog -vvv 2>&1 | grep -i "downloading\|packages.json"
你应该看到类似 Downloading https://mirrors.aliyun.com/composer/packages.json。如果出现 https://packagist.org/packages.json 或 https://repo.packagist.org/packages.json,说明配置被项目级 composer.json 中的 repositories 覆盖了,或者全局配置根本没写进去。
另一个可靠方式是:composer diagnose,看输出里 Repo packagist.org: 这一行显示的 URL——它反映的是当前实际生效源,比 config -g 更可信。
缓存目录路径以 composer diag 为准
composer config --global cache-dir 只显示配置项内容,不能代表真实路径。真正起作用的是 composer diag 输出中的 Cache directory: 行,它已综合环境变量(如 COMPOSER_HOME)、配置文件、默认逻辑得出最终路径。
常见陷阱包括:
-
COMPOSER_HOME设为相对路径或含~,导致 Composer 找不到缓存目录 - Windows 下设了系统级环境变量但没重启终端,shell 仍读旧值
- Linux/macOS 用
sudo composer config -g,把配置写进了/root/.composer/config.json,普通用户运行时根本读不到
classmap-authoritative 模式必须三步确认
只跑 composer dump-autoload --classmap-authoritative 不代表真启用。必须同时满足:
- 加
--no-dev参数,否则 dev autoload 规则残留会触发 fallback - 检查
vendor/autoload.php是否含'classmap-authoritative' => true - 打开
vendor/composer/autoload_real.php,确认findFile方法里只剩$classMap分支,完全找不到$this->prefixesPsr4或$this->fallbackDirsPsr4相关代码
否则线上仍会大量调用 stat("src/Class.php"),性能没提升,只是白跑了命令。











