真实请求地址才是最终依据:执行composer clear-cache清缓存,再用composer -vvv require xxx查看日志中get的实际url;项目级composer config repositories和全局composer config -g repo.packagist输出共同决定生效源。

直接看真实请求地址,而不是配置里写了啥。 Composer 是否真走你配的镜像或私有源,不取决于 composer.json 里 repositories 数组有没有那条,而取决于它实际发出去的 HTTP 请求 URL 是什么。
怎么确认当前生效的远程仓库地址
项目级配置优先于全局,且旧键名(如 repos.packagist)可能残留但已失效。只盯两个命令输出:
- 查项目实际用的主源:
composer config repositories,找"packagist.org": { "type": "composer", "url": "..." }这一项——这才是 Composer 7+ 唯一认的镜像入口 - 查全局是否覆盖了项目配置:
composer config -g repo.packagist,返回 JSON 才算有效;空或报错说明走默认官方源
别被 composer config -g --list 里一堆 repos.* 字段带偏,那些和主镜像无关。
验证是否真发请求到新地址
改完配置后,90% 的“不生效”是因为缓存没清、请求仍走旧地址:
- 必须执行
composer clear-cache,否则元数据全从本地缓存读,根本不会发新请求 - 加
-vvv参数重试安装操作,比如composer -vvv require monolog/monolog - 在日志里搜
GET https://,看到的 URL 才是真实请求地址(例如GET https://mirrors.aliyun.com/composer/packages.json)
如果还看到 https://repo.packagist.org,说明镜像没生效,回头检查 repositories 数组里 {"packagist.org": false} 是否独立存在且位置在末尾。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么 composer search 能搜到,require 却报 not found
composer search 只查 packagist.org 全局索引,完全不读你的 repositories 配置;而 require 是真安装,严格按以下顺序匹配:
- 先查
repositories数组,从上到下,命中即停(但前提是{"packagist.org": false}已显式关闭) - 若私有源返回 404 或元数据缺失(比如 VCS 仓库根目录没
composer.json),Composer 不会 fallback,而是直接报错 - 包只有
dev-main版本,但项目设了"minimum-stability": "stable",也会静默跳过,不提示版本问题,只报 not found
所以搜得到 ≠ 装得上,关键看 require 阶段的真实网络请求和元数据响应。
容易被忽略的硬性条件
自定义仓库(尤其是 path 类型)不生效时,往往不是配置语法错,而是三个细节没对齐:
-
url必须是相对路径(如"../my-package")或绝对路径(如"/Users/me/my-package"),不能带file://,也不能用~/ -
name字段(在repositories条目里)和本地包composer.json中的name必须逐字节一致(大小写、斜杠方向都不能差) - 必须显式写
"options": {"symlink": true}——放在主项目composer.json的repositories条目里,放别处都无效
这些条件缺一就会静默 fallback 成拷贝,终端日志里甚至不报错,只在 vendor/ 目录里发现不是符号链接时才暴露问题。










