执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 命令必须包含 type 值“composer”,漏写会导致静默回退官方源;改完需重启 vs code 集成终端并运行 composer clear-cache 才生效。

composer config -g repo.packagist 命令必须写全
在 VS Code 集成终端里执行全局镜像修改,最常犯的错是漏掉中间那个 composer——它不是注释,而是 type 值。命令必须是:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
少一个词,比如写成 composer config -g repo.packagist https://mirrors.aliyun.com/composer/,Composer 2.x 就会静默 fallback 到官方源,install 还是连 packagist.org。
常见错误现象:
-
composer config -g repo.packagist返回空或null -
composer diagnose显示Repo packagist.org: https://packagist.org(没变) - 执行
composer update -vvv日志里出现GET https://packagist.org/packages.json
Windows 用户改完要重开集成终端
VS Code 的集成终端不会自动读取新写的全局配置(%APPDATA%\Composer\config.json),尤其在 Windows 上。改完后不重启终端,composer config -g repo.packagist 可能查不到刚设的值。
验证方法:
- 关掉所有 VS Code 终端标签页
- 重新打开一个终端(Ctrl+Shift+`)
- 立刻运行
composer config -g repo.packagist,确认有输出 - 再跑
composer diagnose | grep "Repo packagist.org"
Git Bash 用户额外注意:~/.composer/config.json 和 %APPDATA%\Composer\config.json 是两个路径,别查错地方。
项目级配置更可靠,且自动写进 composer.json
如果你在 VS Code 里打开了某个 PHP 项目文件夹,直接在集成终端里运行(不带 -g):
composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/
它会自动往项目根目录的 composer.json 里加 "repositories" 字段,结构类似:
{"repositories": {"packagist": {"type": "composer", "url": "https://mirrors.tuna.tsinghua.edu.cn/composer/"}}}
这个设置优先级高于全局,且会被 Git 跟踪,适合团队协作。但要注意:
- 如果项目已有
"repositories": [](数组),这条命令会失败;得先手动改成对象{}或用--unset - 如果已有私有源,建议用完整 JSON 格式合并,避免覆盖:
composer config repositories.my-private '{"type":"composer","url":"https://my.repo/"}'
改完必须清缓存,否则日志看着快、实际还走旧源
VS Code 终端里执行完镜像配置,下一步不是 composer install,而是:
composer clear-cache
原因:Composer 会缓存 packages.json 元数据,哪怕你换成了阿里云镜像,缓存里还是 packagist.org 的旧路径,导致版本解析失败或拉包时跳回 GitHub。
验证是否真生效的唯一办法是看网络请求:
- 运行
composer show monolog/monolog 3.* -vvv 2>&1 | grep "Downloading" - 确认输出里是
mirrors.aliyun.com或你配的镜像域名,而不是packagist.org或github.com - 如果看到
Could not fetch https://mirrors.xxx//p2/(注意双斜杠),说明 URL 少了末尾/
镜像配置本身很简单,真正容易卡住的是缓存、路径和键名这三处——它们不出错不报错,只默默失效。











