全局镜像仅对未定义repositories的项目生效,一旦项目composer.json中声明了repositories(含空数组),全局配置即被彻底屏蔽而非降级;必须用正确键名repo.packagist.org配置,且仅支持替换Packagist源;项目级repositories会完全覆盖全局配置,需显式禁用packagist.org并确保URL末尾无斜杠、type为composer。

全局镜像只影响没定义 repositories 的项目
全局镜像本质是给所有项目设一个“默认 fallback 源”,但只要项目 composer.json 里写了 repositories 字段(哪怕空数组),Composer 就直接扔掉全局配置,完全不读它。这不是“优先级低”,而是“彻底屏蔽”。
常见错误现象:composer config -g repo.packagist.org 显示已配置,但 composer install 还是连 packagist.org;composer config repositories 输出为空或只有默认项,说明项目级配置已接管。
-
repo.packagist.org是唯一有效的键名(注意复数repos+.org),写成repo.packagist或repository都无效 - 全局配置只能替换 Packagist 元数据源,不支持私有仓库、VCS 源等类型
- 全局命令必须用
composer config -g repo.packagist.org composer https://mirrors.aliyun.com/composer/(末尾带斜杠) - 配置写入路径:Linux/macOS 是
~/.composer/config.json,Windows 是%APPDATA%\Composer\config.json
项目级 repositories 数组会完全覆盖全局配置
项目级镜像不是“补充”或“叠加”,而是整块替换。Composer 不合并两个 repositories 数组,只用你项目 composer.json 里写的那个。
常见错误现象:执行 composer install 报 Could not fetch packages,或仍从 packagist.org 下载——多半是结构写错或漏了禁用原源。
- 必须显式禁用官方源:
"packagist.org": false,否则它仍会作为兜底参与请求 - 镜像 URL 末尾不能带斜杠(
https://mirrors.aliyun.com/composer✅,https://mirrors.aliyun.com/composer/❌) -
type必须为composer,不是package或vcs - 数组顺序决定实际行为:从上到下逐个请求,第一个返回有效 JSON 的源就锁定使用
验证镜像是否真正生效不能只看 config 输出
composer config -g repo.packagist.org 只告诉你“写了什么”,不代表“用了什么”。真正生效要看网络请求路径。
最可靠验证方式是开启调试日志:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer clear-cache && composer require monolog/monolog -vvv
在输出中搜索 Downloading,确认出现的是:
-
Downloading https://mirrors.aliyun.com/composer/packages.json✅ - 而不是
https://packagist.org/packages.json或https://repo.packagist.org/packages.json❌
如果看到后者,说明项目 composer.json 中的 repositories 已生效,且内容可能有误(比如 URL 错、没禁用 packagist.org、type 不对)。
清缓存和重装不是可选动作,而是强制步骤
镜像切换后,旧缓存和 composer.lock 里的元数据仍指向原源,不清理就不会走新镜像。
必须执行三步:
-
composer clear-cache:清掉本地包元数据缓存 - 删掉
vendor/和composer.lock - 再跑
composer install或composer update,让 Composer 重新解析依赖并生成新锁文件
尤其要注意:改完项目级 repositories 后,composer update 不会自动更新 lock 文件里的源地址,必须删 lock 再重装,否则它还是按旧记录拉包。

















