composer 需分别配置 packagist 国内镜像(如阿里云)加速公共包安装,与 gitee 私有库认证(ssh 或 token)拉取源码;二者逻辑独立,不可混淆。

Composer 本身没有“Gitee 镜像”这个概念——Gitee 不是 Packagist 的镜像源,它只是代码托管平台;你真正需要的,是把 packagist.org 的官方包索引替换成国内镜像(如阿里云),同时让 Composer 能从 Gitee 拉取私有仓库代码。这两件事常被混为一谈,但配置逻辑完全不同。
怎么配 Packagist 国内镜像(加速 public 包安装)
这是解决 composer install 卡在 “Loading composer repositories” 或下载 topthink/framework 极慢的根本办法。Gitee 不参与这一步,别往 repositories 里硬塞 Gitee 地址。
- 全局生效(推荐):运行
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,它会写入~/.composer/config.json,所有项目都走阿里云镜像 - 若曾用过已失效的旧镜像(如
packagist.phpcomposer.com),先执行composer config -g --unset repos.packagist清掉残留配置,再重设 - 验证是否生效:运行
composer config -g repo.packagist,输出应为https://mirrors.aliyun.com/composer/
怎么让 Composer 从 Gitee 拉私有库(不是镜像,是源码地址)
当你在 composer.json 里 require 一个 Gitee 私有仓库(比如 "myorg/utils": "dev-main"),Composer 必须能认证并克隆它。这里没捷径,得选一种凭据方案:
-
SSH 方式(最稳,适合长期开发):确认
ssh -T git@gitee.com能通,然后在repositories中写"url": "git@gitee.com:yourname/your-private-repo.git";无需输密码,也不暴露 Token -
HTTPS + Personal Access Token(CI/CD 必选):Gitee 个人设置里生成 Token(勾选
repo),再写成"url": "https://${GITEE_TOKEN}@gitee.com/yourname/your-private-repo.git",并在 CI 中注入环境变量GITEE_TOKEN -
避免明文写密码或 Token 到
composer.json:直接拼https://user:pass@gitee.com/...看似简单,但提交后 Token 就泄露了,Git 历史里永远删不干净
为什么不能把 Gitee 当作 Packagist 镜像用?
因为 Packagist 是 PHP 包的「元数据索引中心」,它记录每个包的版本、依赖、自动加载规则等;而 Gitee 只是 Git 仓库托管服务,不提供包发现、语义化版本解析、依赖图谱这些能力。你手动在 repositories 里加一个 Gitee 地址,只对那个仓库生效,不会加速 monolog/monolog 或 laravel/framework 的安装——它们仍要从 Packagist 获取元数据,再按镜像源下载 ZIP。
常见错误:有人把 "type": "composer", "url": "https://gitee.com/xxx/packagist-mirror" 这种不存在的服务硬塞进配置,结果 composer update 报 Could not parse version constraint 或直接卡死——Gitee 根本不运行 Packagist 服务端。
真正容易被忽略的点是:镜像配置和私有库认证是两层独立机制,必须分开处理。改错地方(比如只配了 Gitee URL 却没换 Packagist 镜像),你会觉得“怎么还是这么慢”,但其实慢的环节根本没动。










