换镜像源是解决 Composer 国内连接失败的唯一稳定方案,需同时配置全局和项目级 repositories,注意 create-project 和 CI 环境的特殊性,避免混用官方源与镜像源。

Composer install 时提示 “Connection refused” 或超时
国内直连 packagist.org 经常失败,根本原因是 DNS 污染 + 连接被重置,不是网络不稳定。换镜像源是唯一稳定解法,但必须改对位置——很多人只改了全局配置却忽略了项目级 composer.json 中的 repositories 覆盖。
- 优先修改全局配置:
composer config -g repo.packagist composer https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9 - 若项目里已有
"repositories"字段(尤其含{"type": "composer", "url": "https://packagist.org"}),它会覆盖全局设置,必须手动删掉或改成镜像地址 - 阿里云镜像已支持 HTTPS 和完整元数据同步,比腾讯云镜像更新更及时;清华镜像偶尔出现索引延迟,不建议用于 CI 环境
使用 composer create-project 仍走官方源
这个命令默认忽略全局镜像配置,因为它内部会新建一个临时 composer.json 并硬编码 packagist.org。不加参数直接跑,等同于裸连。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法:
composer create-project laravel/laravel myapp --repository-url=https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9 - 也可以先
cd myapp,再运行composer config repo.packagist composer https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9,最后composer install - 注意:
--repository-url参数只影响本次命令,不会写入配置,适合一次性脚本
CI/CD 中 Composer 缓存失效或拉取缓慢
GitHub Actions、GitLab CI 等环境默认不继承本地全局配置,且容器每次都是干净状态。单纯设环境变量 COMPOSER_REPO_PACKAGIST 无效,Composer 不读这个。
- 推荐做法:在 CI 脚本开头执行
composer config -g repo.packagist composer https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9 - 同时启用缓存:
composer install --no-interaction --optimize-autoloader --prefer-dist,其中--prefer-dist强制下载压缩包而非 Git 克隆,速度提升明显 - 若用 Docker 构建,可在
Dockerfile中把上述config命令写进RUN,避免每步都重复设置
镜像源切换后 composer update 报 “Package not found”
这不是镜像问题,而是镜像同步有窗口期:新发布的包可能要等 5–30 分钟才出现在镜像中。特别是 dev 分支、私有包或刚提交到 packagist.org 的版本。
- 先确认包是否真在 packagist.org 上可查,再检查镜像状态页(如 阿里云镜像状态)是否有同步延迟告警
- 临时解决方案:只对特定包绕过镜像,
composer config --unset repos.packagist后加"repositories": [{"type": "composer", "url": "https://packagist.org"}]到项目composer.json,再composer update vendor/package-name - 切勿长期混用官方源和镜像源,会导致依赖解析冲突,Composer 可能静默降级版本
create-project 不认全局、项目级 repositories 会劫持所有请求、CI 容器没有持久化配置。这些地方一漏,就又回到超时重试的老路。

















