必须显式声明repositories并禁用packagist.org:在composer.json中添加type为composer的私有源(url以/结尾),同级设"packagist.org": false;多源按数组顺序匹配,package类型可强制路由且优先级最高。

要在项目中精准控制依赖包来源,避免 Composer 默认只查 packagist.org 导致私有包始终 404,必须在 composer.json 的 repositories 字段中显式声明源类型、URL 和路由逻辑,漏掉关键字段或顺序错乱都会让配置完全失效。
基础仓库声明与默认源禁用
第一步:打开项目根目录下的 composer.json 文件,在顶层 JSON 对象中添加 repositories 数组(若不存在)。
第二步:向 repositories 中插入一个 type 为 composer 的私有源条目,URL 必须以 【/】 结尾,例如:"https://artifactory.example.com/artifactory/api/composer/my-virtual-repo/"。
第三步:在同一层级(repositories 同级),添加 【"packagist.org": false】 这一行。它不是 repositories 的子项,而是独立键值对;漏掉这行,Composer 仍会优先走官方源,你的私有包永远不被匹配。
多源并存时的类型区分与优先级控制
方法一:按协议类型混用多个源
在 repositories 数组中依次写入不同 type 的源——vcs 类型用于直连 Git 仓库,composer 类型用于私有 Packagist 实例,artifact 类型指向本地 tar 包目录。Composer 按数组顺序扫描,但仅对匹配包名的源发起请求,不盲目轮询。
方法二:用 package 类型强制绑定特定包
当某个内部工具包(如 acme/utils)既不能公开托管,又不想暴露 Git 地址给所有开发者时,直接在 repositories 中声明 package 类型条目,内嵌 name、version、dist.url 和 autoload 规则。这一步会完全绕过自动发现机制,【Composer 以 package 声明为准,哪怕同名 vcs 源也失效】。
认证凭证的落地方案
如果私有源需要 HTTP Basic 认证(如 Artifactory 或 Nexus),不要把用户名密码硬编码进 composer.json。在项目根目录创建 auth.json 文件,写入:
{ "http-basic": { "private-packagist.example.com": { "username": "token", "password": "abc123" } } }
该文件默认被 Composer 自动读取,且应加入 .gitignore —— 若误提交,CI 环境可能因凭据泄露中断构建。
验证配置是否生效
① 运行 composer config --list,确认输出中包含你刚配置的 repositories 条目,且 packagist.org 显示为 false。
② 执行 composer show -p,观察返回的包列表是否含私有包名称;若仍为空,说明源未被识别或 URL 不可达。
③ 直接运行 curl -I https://your-private-source.com/packages.json,必须返回 HTTP 200;返回 403 或 404 时,Composer 会静默 fallback 到 packagist.org,不会报错提示。











