--repository-url仅替换元数据源,不参与包发现;必须通过repositories声明+require显式指定同名包才能生效,且version需可解析、name须完全匹配。
只能通过配置块 +显式指定包名,才能让某个包走自定义源;光改全局源或用不起作用。
为什么
对单个包无效
这个参数只替换元数据获取地址(即 packages.json),但 Composer 仍会按
中声明的包名去原源查版本信息。如果你要的包不在那个镜像里(比如私有包、未同步的 dev 分支),就会 fallback 到 packagist.org 或直接报错。
常见错误现象:
,即使你加了
。
根本原因:Composer 不会把
当作“候选源列表”,它只当“唯一元数据源”
正确思路:把自定义源作为
的一部分,让它参与包发现过程
必须配合
使用——不能靠
自动拉取,得明确写进依赖声明里
中 type 选
还是
取决于你控制的是源代码还是预构建包:
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
:适用于 Git/Svn/Hg 仓库,Composer 会自动识别分支、tag、commit,支持
、
等写法,推荐用于开发中调试或 fork 后 patch
:适用于没有
composer
.json 的 ZIP 包、内部 PHP 工具库、或需要手动声明版本信息的场景;必须手写
、
、
等字段,否则 autoload 失效
别混用:一个仓库 URL 只能配一种 type;如果同时有 Git 和 ZIP,得拆成两个 repository 条目
示例(vcs):
require 时怎么写包名和版本才命中自定义源
包名必须和自定义源中
的
字段完全一致;版本必须存在且可解析。
Git 仓库:用
或
,例如
如果仓库没设默认分支(如无
或
),得显式写
,否则报
私有 Git 用 SSH?确保
能本地
成功,否则 Composer 会卡在
别依赖
:vcs 源不提供 “latest-stable” 元数据,
(不带版本)大概率失败
容易被忽略的权限与缓存问题
配置完
和
,运行
仍失败?先检查这几处:
是否清过缓存:
—— Composer 会缓存 vcs 仓库的 tags/branches 列表,改了远程分支后旧缓存会导致找不到新 tag
SSH 密钥是否加载:
要能通;若用 HTTPS,确认是否需 token(
)
仓库的
是否合法:
不报错,且含
和
(vcs 源可省略 version,但 package 源必须有)
别漏掉
的包名参数:写
全量更新可能跳过你的包,因为它的版本约束没变;务必加具体包名
最稳验证方式:
输出里出现
字段且 URL 是你配的仓库地址,才算真正走对了源。
repositoriesrequire--repository-url--repository-urlcomposer.jsonCould not find package vendor/package at any version--repository-url http://my-git.internal--repository-urlrepositoriesrequireinstallrepositoriesvcspackage"type": "vcs"dev-mainv1.2.3"type": "package"versiondist.urlautoload"repositories": [
{
"type": "vcs",
"url": "https://github.com/myorg/internal-sdk.git"
}
]composer.jsonnamedev-branchdev-commit-hashcomposer require myorg/internal-sdk:dev-mainmainmasterdev-developCould not find a branch or tag matching 'dev-main'git@github.com:myorg/internal-sdk.gitgit cloneFailed to execute git clonelatestcomposer require myorg/internal-sdkrepositoriesrequirecomposer update myorg/internal-sdkcomposer clear-cachessh -T git@github.comhttps://token:x-oauth-basic@github.com/...composer.jsonjson_decode(file_get_contents('composer.json'), true)"name""version"composer updatecomposer updatecomposer show myorg/internal-sdksource