配置 repositories 是为了精确控制包来源、版本及 fallback 行为,必须用索引数组、按优先级排序、显式禁用 packagist.org,且 type 决定解析方式——配错顺序、类型或漏禁默认源将导致静默失败。

配置 repositories 不是为了“让 Composer 能装包”,而是为了**精确控制某个包从哪来、用哪个版本、是否允许 fallback**。它不是可选项,而是当你遇到私有包、内部镜像、fork 修复或版本覆盖时的必经配置——配错顺序、类型或漏关默认源,composer require 就会静默跳过你的仓库,直接报 Could not find package。
repositories 数组必须是索引数组,且顺序 = 优先级
Composer 不会合并或智能排序,它从 repositories 数组第一个元素开始逐个查询,只要某个源返回了匹配的包(哪怕只是 HTTP 200 + 空响应),就立刻停止,后面所有源都不再检查。
- 私有包想生效,必须把对应仓库对象放在数组最前面
- 想保留官方源作 fallback,得在私有源之后、数组末尾加
{"packagist.org": true}(不是{"type": "composer", "url": "https://packagist.org"}) - 写成对象形式(如
"repositories": {"my-repo": {...}})会导致只有最后一个被识别,其余静默失效 - CI 构建失败常因本地全局
~/.composer/config.json也配了repositories,但项目级配置会完全覆盖它——建议只在项目composer.json中声明
type 写错,整个仓库就被忽略,还不报错
type 字段不是装饰,它决定了 Composer 怎么解析这个 URL:vcs 只查你 require 的那个包,composer 类型才提供完整元数据索引。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
"type": "vcs":URL 必须是 Git/SVN 地址(如https://gitlab.example.com/org/pkg.git),且该仓库根目录要有合法composer.json;仅当你composer require org/pkg时才触发探测,不参与search或依赖解析 -
"type": "composer":URL 必须指向一个能返回packages.json的服务(如 Satis、Private Packagist、阿里云镜像),支持版本发现和缓存;适合团队级私有源 -
"type": "package":需手动写死name、version、dist等字段,维护成本高,仅用于极特殊静态场景 - 漏写
type,或把私有 Packagist 误配成vcs,仓库会被跳过,命令行无提示
packagist.org 不是默认开着的,得你亲手开或关
一旦你在 composer.json 里写了 repositories 数组,Composer 就自动禁用隐式 packagist.org。这不是容错设计,是硬性切换。
- 不加
{"packagist.org": true}→ 连monolog/monolog都装不了,报Could not find package - 加了但放错位置(比如放在第一位)→ 所有包都走官方源,私有配置彻底失效
- 想彻底禁用官方源防污染,必须写
{"packagist.org": false}作为数组中独立一项,不能塞进其他仓库对象里 - 别信“Composer 2.2+ 默认内置 packagist.org”这种说法:只要定义了
repositories,它就关,没例外
认证凭据绝不能硬编码进 composer.json
HTTPS 私有 Git 仓库若需 token,写在 url 字段里(如 https://token:x-oauth-basic@gitlab.example.com/...)既危险又不可靠——容易提交到代码库,且 CI 环境无法复用。
- 推荐用 SSH URL:
git@gitlab.example.com:org/pkg.git,并在部署机上预置对应 SSH key - 或用
git config --global credential.helper store配凭证助手,由 Git 自动处理 HTTPS 认证 - 私有 Composer 服务(如 Satis)需通过
auth.json单独配 HTTP Basic 或 API Token,路径为项目根目录或COMPOSER_HOME - 运行
composer config repositories可确认当前实际生效的源列表,避免被全局配置干扰
最易被忽略的点:私有 composer 类型源的 packages.json 必须真包含你要的 vendor/name 条目,不是 URL 能访问就行;vcs 仓库的 tag 名必须和 composer.json 里的 version 字段严格一致,否则该版本不会被识别。










