composer config -g repo.packagist 不生效是因为键名必须为单数 repo.packagist、第二参数必须显式写 composer(type 值)、URL 必须以 / 结尾,三者缺一即静默回退官方源,且验证需输出完整 JSON 如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。

composer config -g repo.packagist 命令为什么总不生效
不是命令没运行,而是三个硬性条件漏一即静默失效:键名必须是 repo.packagist(多一个 s 就彻底无效),中间的 composer 是 type 值(不能省略或替换成其他字符串),URL 必须是 HTTPS 且末尾带斜杠——https://mirrors.aliyun.com/composer/ ✅,https://mirrors.aliyun.com/composer ❌。
验证是否写入成功,直接执行:composer config -g repo.packagist
输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报错或仍显示 https://packagist.org,说明配置失败。
升级 Yii2/Laravel/ThinkPHP 组件时还卡在 Resolving dependencies
镜像只加速下载,不加速依赖解析。这个阶段卡住,和网络无关,典型原因包括:
-
composer.json里用了过宽的版本约束,比如"php": "*"或"^7.4 || ^8.0 || ^8.1",导致求解器暴力穷举 - 启用了
"minimum-stability": "dev",强制拉取不稳定分支,候选包数量爆炸 -
composer.lock被删或未提交,composer install实际退化为update,触发全量重解析 - 项目
repositories字段中存在已下线的私有源,Composer 逐个超时才 fallback
快速排查:composer config --list | grep repositories 看实际生效源;composer validate --strict 检查 lock 文件合法性。
立即学习“PHP免费学习笔记(深入)”;
composer update 加哪些参数才算真正提速
光换镜像只是第一步。升级组件时建议组合使用以下参数:
-
--no-dev:跳过require-dev包(如 phpunit、phpcs),节省 30–60% 时间 -
--prefer-dist:强制走 ZIP 包而非 git clone,避免 SSH/HTTPS 认证和 I/O 开销 -
--optimize-autoloader(或-o):生成静态类映射,提升后续 PHP 执行效率 -
--classmap-authoritative(或-a):仅限部署环境,关闭文件扫描,但本地开发禁用(否则新增类直接Class not found)
CI/CD 推荐完整命令:composer update --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative --no-interaction --no-progress
Yii2 项目升级时特别要注意 asset 插件残留
旧版 Yii2 项目常含已废弃的 fxp/composer-asset-plugin,它是升级卡死的主因:强行调用 Node.js 拉 Bower 包,而国内访问 bower.io 基本超时。
必须彻底清理:
- 卸载插件:
composer global remove fxp/composer-asset-plugin - 切换到纯 Composer 方式:
composer config -g repositories.asset-packagist '{"type": "composer", "url": "https://asset-packagist.cn"}' - 删掉
composer.json中所有"replace": {"bower-asset/*": "*"}类声明 - 清缓存:
composer clear-cache,删vendor和composer.lock
否则即使镜像配对了,也会在 yii2-auth-client 或 GitHub 相关包上反复失败。



















