composer config -g repo.packagist 不生效是因为键名必须为单数 repo.packagist、type 值必须显式写 composer、url 必须 https 且末尾带 /,三者缺一即静默回退官方源,验证需输出完整 json 或纯 url 字符串。

composer config -g repo.packagist 必须写对,否则所有后续操作都白忙——不是慢,是根本没走镜像。
为什么 composer config -g repo.packagist 总是不生效?
90% 的失败不是网络问题,是命令写错三个硬性细节,且 Composer 2.x 静默回退到 https://packagist.org,不报错也不提醒:
-
repo.packagist不能拼成repos.packagist(多一个 s 就失效) - 中间那个
composer是type值,必须显式写出,漏掉就当没这回事 - URL 必须是 HTTPS + 末尾带斜杠:
https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌
验证方式只有一条:composer config -g repo.packagist。输出必须是 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 或纯 URL 字符串。空、null、或仍是 https://packagist.org,说明根本没写进去。
全局配置 vs 项目级配置:谁该用哪个?
全局配置省事,但宝塔、Docker、CI 流水线里大概率读不到——它们运行在 www、runner 等非 root 用户下:
- 个人开发或本地单机:用
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 团队协作或部署环境:进项目根目录,运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉-g),它会自动安全追加到composer.json的repositories字段,不覆盖已有私有源 - 宝塔用户务必切到对应用户配:
sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer install 还卡在 downloading?调并发和关冗余
换镜像只是第一步。Composer 2.2+ 默认只并发 3 个连接,严重浪费国内带宽;同时默认启用 dev 依赖、脚本、autoload 生成,这些对 ThinkPHP 等框架启动完全非必需:
- 提升下载并发:
composer config -g http-max-concurrent-downloads 10(别超 12) - 跳过 dev 包:
--no-dev(省掉 phpunit、phpstan 等大体积包) - 跳过脚本执行:
--no-scripts(避免post-autoload-dump因权限失败中断) - 跳过 autoload 生成:
--no-autoloader(装完再跑composer dump-autoload -o更稳)
CI/CD 或首次部署推荐组合:composer install --no-dev --no-scripts --no-autoloader --prefer-dist
换源后 composer install 报 hash 不匹配或 package not found?
镜像只加速下载,不改变包内容,但元数据同步有延迟或缓存残留。旧 composer.lock 记录的是官方源的哈希值,和镜像返回的元数据不兼容:
- 删掉
vendor/和composer.lock - 清缓存:
composer clear-cache - 再执行
composer install(不是update)
别试图保留旧 lock 文件——它不是“版本快照”,而是“源绑定快照”。换源就得重来。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











