项目级镜像必须写入composer.json顶层repositories对象中,key为"packagist"且type为"composer"、url末尾不加/,并同级声明"packagist.org": false;改完后须删除vendor和composer.lock再执行composer install才生效。

项目级镜像必须写进项目根目录的 composer.json,不是改全局配置,也不是加命令行参数——写错位置或结构,composer install 依然会连 packagist.org。
怎么在 composer.json 里正确声明镜像源
必须把镜像源作为 "repositories" 对象的子项,且 key 固定为 "packagist",type 必须是 "composer",url 末尾不能带 /:
-
"repositories"是顶层字段,不能嵌套在config或require里 - 写成数组(
[])会导致私有源丢失,应始终用对象({})结构 - 示例有效写法:
"repositories": { "packagist": { "type": "composer", "url": "https://mirrors.aliyun.com/composer" } } - 若已有其他仓库(如私有 Satis),这个
"packagist"条目只会替换默认源,不影响其余条目
为什么禁用 packagist.org 是必须步骤
不显式关掉它,Composer 仍会把 packagist.org 当作兜底源参与请求,导致部分包从国外拉、部分从镜像拉,甚至触发 404 或签名验证失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须在同级加
"packagist.org": false声明 - 完整结构应为:
"repositories": { "packagist": { "type": "composer", "url": "https://mirrors.aliyun.com/composer" }, "packagist.org": false } - 漏掉这行,
composer show monolog/monolog --no-cache可能仍显示Available from: https://repo.packagist.org
验证镜像是否真生效的实操方式
别信 composer config repo.packagist 的输出——它只查全局配置,对项目级无效;得看真实网络请求。
- 运行
composer update -v 2>&1 | grep "Fetching",确认 URL 是你配的镜像地址(如Fetching https://mirrors.aliyun.com/composer/p2/...) - 务必加
--no-cache,否则可能命中本地缓存,误判成功 - CI 环境中要先执行
composer config -g --unset repo.packagist,避免全局配置干扰 - 如果看到
https://repo.packagist.org或packages.json404,说明"packagist.org": false没生效或 url 少了协议
最容易被忽略的是:改完 composer.json 后必须删掉 vendor 和 composer.lock 再跑 composer install,否则旧锁文件会继续走原来路径。镜像只管下载,不重算依赖树——那一步卡住,和镜像无关。

















