composer install走国内源是因为全局配置(composer config -g repo.packagist)优先级高于composer.json,即使后者未写镜像地址;还原需执行composer config -g --unset repo.packagist并clear-cache。

composer.json 里没写镜像地址,为什么 composer install 还走国内源?
因为镜像配置不只存在 composer.json 里——它优先从全局配置(composer config -g repo.packagist)或项目级配置(composer config repo.packagist)读取。如果之前执行过 composer config -g repo.packagist https://packagist.phpcomposer.com 这类命令,哪怕 composer.json 是干净的,安装时照样走镜像。
还原镜像的本质,是清除或覆盖这些配置项:
- 查当前生效的源:
composer config -g repo.packagist(全局)或composer config repo.packagist(当前项目) - 删掉它:
composer config -g --unset repo.packagist或composer config --unset repo.packagist - 确认已清空:
composer config -g repo.packagist应返回空;再运行composer install就会直连 packagist.org
用 repositories 字段强制指定官方源,但不生效?
composer.json 里的 repositories 是用来添加私有包源或替换默认源的,但它不会自动“覆盖”已存在的全局镜像配置。也就是说,即使你在 composer.json 里写了:
"repositories": [
{
"type": "composer",
"url": "https://packagist.org"
}
]
只要全局 config 还存着镜像地址,Composer 仍会优先用那个镜像。
真正起效的方式是显式禁用镜像并启用官方源:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 先清空已有镜像配置(见上一条)
- 再在
composer.json中设置:"repositories": [{"type": "composer", "url": "https://packagist.org"}] - 注意:必须同时把
"packagist.org": false加进去,否则 Composer 仍会合并默认源(即隐式加回镜像) - 完整写法示例:
"repositories": [
{
"packagist.org": false
},
{
"type": "composer",
"url": "https://packagist.org"
}
]
composer.lock 里记录了镜像地址,会影响还原吗?
不会。composer.lock 只保存包名、版本、dist URL 和 hash,不存源地址。它记录的是「从哪个 URL 下载过这个 zip」,不是「从哪个源解析出来的」。所以删掉 lock 文件或重生成,对是否走镜像没影响。
但要注意一个副作用:如果你之前用镜像装过包,composer.lock 中的 dist.url 可能指向镜像域名(比如 https://phpcomposer.com/files/...)。这会导致 composer install 直接复用该 URL 下载,看起来像还在走镜像——其实只是缓存了旧链接。
- 解决办法:删掉
composer.lock,再运行composer install(此时会重新解析源并下载新 URL) - 或者更稳妥:删 lock + 清 Composer 缓存:
composer clear-cache - 验证是否真走官方源:加
-v参数看下载 URL,应为https://packagist.org/files/...
为什么 composer create-project 还原不了镜像?
因为 create-project 默认会继承当前环境的全局配置,包括镜像设置。它不读目标项目的 composer.json 来决定用哪个源,而是直接按你本地已配好的源去拉取。
想让它绕过镜像,得临时禁用:
- 方法一(推荐):用
--repository-url强制指定官方源:composer create-project laravel/laravel myapp --repository-url=https://packagist.org - 方法二:临时取消全局镜像:
composer config -g --unset repo.packagist && composer create-project ... && composer config -g repo.packagist https://packagist.phpcomposer.com - 注意:
--repository-url只影响本次命令,不影响后续操作
composer.json 就够了,却忘了全局 config 还钉在那儿。Composer 的配置优先级是:命令行参数 > 项目 config > 全局 config > 默认行为,而镜像恰恰最容易被设在全局层。










