必须将镜像源写入composer.json并提交git,因全局配置不被git跟踪且被项目级repositories覆盖;切换镜像前须删除vendor/和composer.lock,否则dist.url仍指向旧源导致未走镜像。

团队协作中,Composer中文镜像不能靠“谁配了谁快”,必须让所有人、所有环境(本地开发机、CI/CD、Docker容器)都走同一镜像源,且不破坏私有包解析——这只有项目级配置 + 显式控制逻辑才能做到。
为什么composer config -g不能用于团队统一配置
这条命令只写入当前用户的~/.composer/config.json,而 Git 不跟踪它,CI 流水线(如 GitHub Actions runner)启动的是干净容器,根本读不到;更关键的是:只要项目里有composer.json且含repositories字段,全局配置就完全被忽略。
-
composer config -g repo.packagist在宝塔、Docker 或 Jenkins 中执行后,对其他成员或构建节点无效 - 某人误执行
composer config -g repo.packagist composer https://packagist.org,全队本地瞬间退回到公网源 - 私有源(如
"type": "vcs")若只在个人全局配置里添加,别人composer install时直接报Could not find package
项目级repositories怎么写才安全可靠
必须把镜像源写进composer.json并提交 Git,这是唯一能被所有环境一致读取的方式。但直接手写 JSON 容易出错,推荐用命令注入,并注意结构兼容性。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g),它会自动在repositories数组里追加条目,不覆盖已有私有源 - 确保
repositories是数组形式(现代 Composer 默认),否则命令可能失败;若已是对象结构(如"repositories": {"packagist": {...}}),该命令也能安全覆盖 - URL 必须带末尾
/:https://mirrors.aliyun.com/composer/✅,少斜杠会拼成/composerpackages.json导致 404 - 类型必须写
"type": "composer",写成"packagist"或"mirror"无效
composer.lock和vendor/必须一起清理才能切镜像
镜像只缓存元数据(packages.json),不托管实际包文件。如果composer.lock里dist.url还是https://api.github.com/,Composer 就绕过镜像直连 GitHub——你看到的“卡在 Downloading”其实是没走镜像。
- 切换镜像前,先删掉
vendor/和composer.lock - 再执行
composer install --no-cache,强制重新拉取元数据并生成带镜像域名的dist.url - 不要试图保留旧
composer.lock,它记录的是旧源的哈希值,和镜像返回的元数据不匹配,必然报hash does not match - 验证是否真走镜像:用
curl -I https://mirrors.aliyun.com/composer/packages.json看响应头,或抓包确认请求域名
私有源和公共镜像共存时的优先级陷阱
Composer 按repositories数组顺序查找包,一旦在前面的源里没找到,才会继续往后查。如果私有包地址写在后面,请求可能被路由到公网镜像而失败。
- 私有源(如内部 Packagist 或 VCS 地址)必须放在
repositories数组最前面 - 显式禁用默认源:
"packagist.org": false要写在composer.json根级别,不是repositories里;否则仍可能 fallback - 必须保留
"type": "packagist.org"作为兜底项(即使设为false),否则 Composer 会跳过默认源逻辑 - 自建内网镜像(如
https://mirror.internal.company.com)需确保所有开发机和 CI 节点 DNS 可解析、证书可信,否则SSL certificate problem会静默中断
最容易被忽略的不是怎么配,而是配完之后要不要删composer.lock——不删,90% 的“换源没用”问题都出在这一步。










