composer install -vvv 能直接看到下载地址,终端逐行打印每个包的 HTTP 请求 URL,如 Downloading https://mirrors.aliyun.com/composer/... 表示来自镜像,https://repo.packagist.org/p2/... 表示回退至官方源,这是判断实际下载源最实时、最可靠的唯一途径。

composer install -vvv 能直接看到下载地址
执行安装或更新命令时加 -vvv 参数,终端会逐行打印每个包的 HTTP 请求细节,包括实际发起请求的 URL。这是最直接、最不可绕过的判断方式。
常见现象:你配置了阿里云镜像,但某次 composer require foo/bar 却从 https://repo.packagist.org 下载——说明该包在镜像中尚未同步,Composer 自动回退到了官方源。
- 输出中出现
Downloading https://mirrors.aliyun.com/composer/...→ 来自镜像 - 出现
Downloading https://repo.packagist.org/p2/...→ 来自官方源 - 若看到
Cloning git@github.com:...或git clone https://...→ 是从 source(Git 仓库)安装,不是 dist 包
composer config repo.packagist.org.url 查当前镜像配置
这个命令返回的是 Composer 当前“认为”的主源地址,但它不等于实际下载地址——它只反映配置值,不反映运行时是否被跳过或回退。
例如你执行过 composer config repo.packagist.org.url https://mirrors.tuna.tsinghua.edu.cn/composer/,composer config repo.packagist.org.url 就会输出清华源地址。但若该镜像临时不可用,Composer 仍可能 fallback 到官方源,而这个 fallback 不会改写你的配置。
- 配置未生效?检查是否漏了
--global(全局)或没加--unset清掉旧配置 - 项目级配置优先于全局配置,运行
composer config --list可同时看到两者 - 私有仓库或自定义
repositories会覆盖 packagist.org 的行为,此时repo.packagist.org.url的值就只是摆设
vendor/composer/installed.json 里没有来源字段,别指望它
vendor/composer/installed.json 记录的是“已安装了什么”和“怎么 autoload”,但它**不存来源信息**。哪怕你刚从 GitHub 直接 clone 安装了一个包,这个文件里也找不到 source 或 dist.url 字段。
真正能反查来源的只有两个地方:一是 composer.lock 里的 dist.url(对 dist 安装)或 source.url(对 source 安装);二是 -vvv 日志——后者是唯一实时、完整、无需依赖锁文件状态的途径。
-
composer.lock可能被手动编辑或过期,不能当作绝对权威 - 如果包是通过
path类型仓库安装的,lock文件里会标"type": "package"和"url"字段,但这个url是本地路径,不是网络来源 - 用
composer show -p vendor/package只能定位本地路径,跟“从哪来”无关
source vs dist 安装的区别不止是快慢
Dist 安装(zip/tar.gz)走 CDN 缓存,校验 SHA-256 哈希;Source 安装(git clone)拉最新 commit,跳过哈希校验,且不参与签名验证(--verify-signatures 对它无效)。
区分方式很简单:看 composer.lock 里对应包的字段:
- 含
"dist": {"url": "...", "sha256": "..."}→ dist 安装 - 含
"source": {"url": "...", "reference": "abc123..."}→ source 安装 - 两者都存在?Composer 优先用 dist,除非你强制加了
--prefer-source
注意:--prefer-dist 是默认行为,但某些包(比如带 scripts 的私有包)可能被作者标记为 "prefer-source": true,这时即使没加参数也会走 clone。











