必须将镜像配置写入composer.json并提交Git,因全局配置不可版本控制、CI不读取、易被覆盖;项目级需设"repositories"为数组,首项{"packagist.org": false}禁用回退,次项起为带尾斜杠的HTTPS镜像源,且须删vendor和composer.lock强制刷新路径。

团队协作中,Composer中文镜像不是“提速可选项”,而是“不配就跑不起来”的基础设施——配置错一个字符、少一个斜杠、漏一个参数,所有成员都会在composer install时静默 fallback 到 packagist.org,导致超时、403、CI 构建失败,新人半天装不上依赖。
为什么composer config -g repo.packagist在团队里根本不可靠
这条命令只写进当前用户的 ~/.config/composer/config.json,Git 看不见,CI 流水线(如 GitHub Actions、GitLab CI)默认用干净容器,压根不加载它;宝塔面板以 www 用户运行 PHP,但你可能在 root 下配了全局镜像,结果部署时照样卡死。
-
repo.packagist键名多写一个s(变成repos.packagist)→ 命令不报错,但完全无效 - 没加
composer作为 type 参数:正确是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,漏掉中间那个composer就白配 - URL 缺末尾
/:请求会拼成/composerpackages.json→ 404 → 静默回退官方源 - CI 脚本里没加
composer config --global --unset repo.packagist,残留旧配置会污染构建环境
repositories 必须写进 composer.json 并提交 Git
这是唯一能让本地、CI、Docker、新同事 clone 后第一次 composer install 就走对路的方式。Composer 2.2+ 会硬编码 packagist.org 为权威源,仅靠写个镜像 URL 不起作用,必须显式声明禁用:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 第一项必须是
{"packagist.org": false},且是独立数组项,不能合并进第二项(比如和镜像 URL 写在一起无效) - 第二项起才是镜像源,
url值必须以/结尾:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌ -
type必须是"composer",不是"packagist"或"mirror" - 私有 VCS 源(如 GitLab 私库)不受影响,但必须放在
repositories数组前面,否则请求可能被路由到公网源而失败
改完 composer.json 后,为什么还要删 vendor 和 composer.lock?
composer.lock 里存的是每个包的完整 dist URL(比如 https://api.github.com/.../zipball/),它是在旧配置下生成的。composer install 优先读 lock 文件,完全不解析 repositories —— 即使你刚加了镜像,它仍按 lock 里写的地址去下载,根本不会走新镜像。
- 必须执行
composer update --lock或删掉composer.lock后重新composer install,才能让 lock 文件记录新源路径 - 删
vendor是因为旧包可能已从官方源下载,缓存路径与镜像源不一致,留着可能引发 autoload 或版本冲突 - CI 脚本里建议加一句
rm -rf vendor composer.lock && composer install,避免缓存污染
最易被忽略的一点:团队里只要有一台机器还留着全局镜像,某次 composer require 就可能因上下文差异混用源,导致部分包走镜像、部分走官方,composer.lock 记录混乱。清空所有人全局配置,再统一提交 composer.json,才是真的一致。

















