镜像配置不生效主因是repo.packagist键名错误、缺"type": "composer"字段或url末尾无斜杠,任一出错均导致composer静默回退至packagist.org;验证需执行composer config -g repo.packagist输出完整json且含正确url。

镜像配置不生效,90% 是因为 repo.packagist 键名写错、composer 类型值漏掉,或 URL 缺少末尾 / —— 这三处任一出错,Composer 都静默回退到官方源,根本不会报错。
为什么 composer install 卡在 Downloading https://packagist.org/packages.json
这不是 Laravel 慢,是 Composer 在拉取元数据阶段就失败了。packages.json 是所有依赖解析的起点,它下不来,后面全停摆。国内直连 packagist.org 会遭遇 DNS 解析慢、TLS 握手卡、CDN 节点远等问题,现象就是命令卡住不动,甚至超时断开。
- 真实请求地址可通过
composer install -vvv查看:如果看到GET https://packagist.org/packages.json,说明镜像完全没走 - 正确应看到类似
GET https://mirrors.aliyun.com/composer/packages.json - 这个阶段失败,
--prefer-dist或--no-dev都无效,必须先解决镜像问题
composer config -g repo.packagist 必须严格满足的三个条件
这条命令看着简单,但缺一不可,否则配置等于白写:
-
-g参数不能省:没它就只改当前目录的composer.json,换项目就失效 - 键名必须是
repo.packagist(单数,不是repos.packagist):多一个s就完全无效,且不提示 - URL 必须是
https://开头 + 末尾/:比如https://mirrors.aliyun.com/composer/,少斜杠会拼成/composerpackages.json导致 404
正确执行后,运行 composer config -g repo.packagist 应输出完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。输出为空、null 或 https://packagist.org,说明配置失败。
项目级镜像配置比全局更可靠
CI/CD 流水线、Docker 构建、团队协作中,全局配置容易因权限、用户上下文或 composer.json 冲突而失效。推荐进项目根目录执行:
-
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉-g) - 该命令会自动在
composer.json顶层写入"repositories": {"packagist": {...}},不覆盖已有私有源 - 如果项目已有
"repositories"数组,别手动编辑,用composer config repositories.packagist ...追加,避免误删
注意:若 composer.json 中存在 "packagist.org": false,会直接屏蔽镜像,需同步调整。
composer create-project 还是慢?得加 --repository
这个命令分两步:先从 GitHub 拉骨架模板(不受镜像影响),再进目录跑 composer install(才走镜像)。如果第一步卡在 GitHub API 限流,全局镜像也救不了。
- 确保已配好镜像后,创建时显式指定:
composer create-project laravel/laravel demo --repository=https://mirrors.aliyun.com/composer/ -
--repository-url或--mirror是无效参数,Composer 会静默忽略 - 搭配
--prefer-dist --no-dev --optimize-autoloader可进一步提速,尤其对 autoload 加载阶段有实测 30%+ 提升
真正容易被忽略的是缓存路径权限和 cache-files-ttl 设置——~/.composer/cache 目录若不可写,或 TTL 过短,会导致每次安装都绕过缓存重新下载。验证用 composer config -g cache-dir 和 composer config -g cache-files-ttl 看实际值。











