手动编辑 config.json 更可靠,因其可直观验证 repositories 字段、packagist.org 关闭项及镜像 URL 格式;命令行易因参数错误静默失效,且需清缓存并验证 JSON 输出与下载日志。

直接改 ~/.composer/config.json(Linux/macOS)或 %APPDATA%\Composer\config.json(Windows)是最安全的方式,命令行方式看似方便,但漏一个字符就静默失效,且毫无提示。
为什么手动编辑 config.json 更可靠
命令行 composer config -g repo.packagist 依赖参数顺序、大小写、空格和斜杠,任意出错都会把配置写进无效字段——比如写成 repos.packagist(多一个 s)或漏掉中间的 composer type 值,composer config -g repo.packagist 查不到输出,却不会报错。而手动打开文件,你能一眼确认三件事是否到位:
-
"repositories"是顶层数组字段,不是"repos"或"repositories.packagist.org" - 数组第一项是
{"packagist.org": false},彻底关闭默认源 - 第二项是
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},url末尾必须带/
改完不生效?大概率是缓存没清
Composer 缓存的是元数据(如 packages.json),不是包本身。旧缓存里记录的仍是 packagist.org 地址,哪怕配置已正确,它仍会优先读缓存、发请求到官网,导致卡在 “Loading composer repositories”。
- 必须执行
composer clear-cache(推荐,清全部) - 或手动删缓存目录:
rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer/(Linux/macOS) - Windows 下对应路径是
%APPDATA%\Composer\Cache\repo\https---mirrors.aliyun.com-composer\
验证是否真走镜像,别信 composer config -g 输出
终端显示 “OK” ≠ 配置落地;composer config -g repo.packagist 返回 URL 字符串也不代表生效——它可能只是 fallback 出来的默认值。
- 运行
composer config -g repo.packagist,输出必须是完整 JSON 对象:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 再跑
composer install -vvv 2>&1 | grep "Downloading",日志中首次出现的域名必须是mirrors.aliyun.com - 如果看到
https://packagist.org/packages.json,说明要么缓存没清干净,要么配置根本没写进文件(比如用sudo写进了/root/.composer/,但当前用户读的是自己家目录)
最容易被忽略的点:项目根目录下的 composer.json 如果含 "repositories" 字段,全局配置完全不生效——这不是 bug,是 Composer 的明确设计。换源前先检查项目级配置是否存在,否则所有操作都是白忙。


















