私有源必须置于 repositories 数组首位,国内镜像次之,再加 {"packagist.org": false} 显式禁用官方源;否则 composer 顺序匹配时遇 404 即报错,不查后续源,导致私有包被跳过。

必须把私有源放在 repositories 数组最前面,国内镜像紧随其后,再显式禁用官方源;否则私有包会被跳过或解析失败。
私有源为什么总被忽略?
Composer 查源是线性顺序匹配:遇到第一个能返回有效元数据的源就停,不再往后查。如果你的私有包叫 mycorp/utils,而它只在内网 GitLab 上托管,但 repositories 里把阿里云镜像写在第一位,Composer 就会先去阿里云查 mycorp/utils —— 返回 404 后直接报错,根本不会走到你配置的私有源。
- 错误顺序:
"repositories": [{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}, {"type":"vcs","url":"https://git.mycorp.com/utils"}] - 正确顺序:
"repositories": [{"type":"vcs","url":"https://git.mycorp.com/utils"}, {"type":"composer","url":"https://mirrors.aliyun.com/composer/"}] - 别依赖“自动 fallback”:超时、500、DNS 失败都会中断流程,只有明确 404 才继续查下一个
怎么安全禁用 packagist.org 又不丢公共包?
不能只删掉官方源 URL,得用 {"packagist.org": false} 显式关闭默认兜底行为,否则 Composer 2.2+ 仍会悄悄去连 https://repo.packagist.org,导致卡在 Loading composer repositories。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 项目级配置推荐写法(手动编辑
composer.json):"repositories": [ {"type": "vcs", "url": "https://git.mycorp.com/utils"}, {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}, {"packagist.org": false} ] - 执行
composer config repositories应看到"packagist.org": false出现在输出末尾 - 千万别写成
"packagist": false或"packagist.org": null,这不会生效
全局配置 vs 项目级配置,哪个更适合混用场景?
项目级更可靠。全局配置(composer config -g repo.packagist ...)会强制所有项目走同一镜像,但私有源往往需要 per-project 定制,比如不同团队用不同 GitLab 地址、token 权限隔离。
- 项目级配置可提交进 Git:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉-g),它只改当前项目的composer.json - 如果已有私有源,这条命令会自动 merge 到
repositories对象里,不会覆盖——前提是原repositories是对象而非数组 - 若原
repositories是数组(比如已写多个源),建议手动编辑,避免结构错乱
最关键的细节是:私有源必须声明自己能提供的包名范围,否则 Composer 不知道该不该查它。VCS 类型源默认不暴露 provider 信息,得靠 composer.json 里的 "name" 字段或启用 GitLab 的 packages API,这点容易被跳过。










