私有仓库不能走公共镜像,因阿里云等中文镜像仅同步packagist.org公开包元数据,不抓取私有仓库packages.json;若未显式配置"packagist.org": false,composer会静默fallback至官方源查私有包而失败,且签名验证亦失效。

私有仓库走公共镜像会解析失败
公共中文镜像(如阿里云、清华源)只同步 packagist.org 上的公开包元数据,不抓取任何私有仓库的 packages.json。一旦你在 composer.json 里配了私有源(比如 "type": "composer", "url": "https://gitlab.internal/api/v4/group/xxx/-/composer"),又同时启用了公共镜像且没关掉 packagist.org fallback,Composer 就可能把私有包名错误地发往镜像站请求,返回 404 或空响应,最终报 Could not find package xxx/yyy。
"packagist.org": false 必须显式声明
很多人只加了镜像 URL,却漏掉这行关键配置:
"repositories": [
{ "type": "composer", "url": "https://mirrors.aliyun.com/composer/" }
],
"packagist.org": false
没加 "packagist.org": false,Composer 仍会 fallback 到官方源查私有包——而私有包根本不在 packagist.org 上,结果就是反复超时或跳过私有源。更糟的是,这个 fallback 是静默发生的,-vvv 日志里只看到一堆 GET https://packagist.org/p2/xxx/yyy.json 的 404,容易误判为网络问题。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
VCS 类私有源(git@ / https://git)和镜像不兼容
如果你的私有包是用 "type": "vcs" 直接指向 Git 地址(如 "url": "git@gitlab.internal:group/repo.git"),那它跟镜像完全无关——镜像只代理 composer 类型仓库的元数据请求。但问题在于:一旦全局或项目级配置了公共镜像,且没清理干净旧配置,Composer 有时会在解析阶段错误地尝试从镜像站拉取 VCS 包的 packages.json(尤其在混合使用 repositories 顺序错乱时),导致报错 Repository type 'vcs' is not supported for repository 'packagist' 或直接卡住。
签名验证失效带来安全风险
Composer 2.5+ 默认启用 signature 校验,但公共镜像不提供 signature 字段。当你把私有包和公共镜像混用,又没强制开启 security.signature true 和保留官方源语义,就可能出现两种情况:
- 校验被跳过:Composer 拉下私有包 ZIP 后不比对
shasum,哪怕包文件被中间篡改也无法发现 - 校验失败:私有包的
composer.lock里写了dist.shasum,但镜像返回的元数据里没带对应字段,导致composer install中断并报Hash does not match
真正该做的是:私有源单独声明,公共包走镜像,两者不交叉;composer.lock 必须提交,dist.shasum 必须存在且为 64 字符;别指望一个镜像 URL 能兜住所有场景。










