私有仓库配置需先确认类型与认证方式,再在composer.json中正确设置repositories字段并添加末尾斜杠,接着用composer config配置凭据,最后删除composer.lock后重新安装验证。

确认私有仓库类型与访问方式
先明确你的私有仓库是哪种:Satis、Private Packagist、Toran Proxy,还是自建的 Composer type=“composer” 服务。不同服务认证方式差异极大,Satis 通常无需认证,而 Private Packagist 必须用 bearer token,Toran Proxy 则常用 HTTP Basic。若不确定,直接访问仓库 URL(如 https://packages.yourcorp.com/packages.json),能返回 JSON 就说明服务在线且路径正确。
如果返回 401 或 403,别急着改 Laravel 配置——先用 curl 测试:curl -H "Authorization: Bearer xxx" https://packages.yourcorp.com/packages.json。这一步跳过就可能把权限问题误判为 Composer 配置错误。
项目级配置私有源(推荐)
打开项目根目录下的 composer.json,在顶层对象中添加 【repositories】 字段。注意必须是复数形式,且结构合法:
方法一:仅私有源(无公共包需求)
在 composer.json 中插入:
"repositories": [{"type": "composer", "url": "https://packages.yourcorp.com/"}]
方法二:私有源 + 禁用默认 packagist(最常用)
这样既拉私有包,又防止 Composer 自动 fallback 到 packagist.org 导致混源冲突:
"repositories": [<br> {"type": "composer", "url": "https://packages.yourcorp.com/"},<br> {"packagist": false}<br>]
方法三:私有源 + 阿里云镜像兜底(适合混合依赖)
把私有源放第一位,镜像放第二位,确保私有包优先命中:
"repositories": [<br> {"type": "composer", "url": "https://packages.yourcorp.com/"},<br> {"packagist": {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}}<br>]
【URL末尾必须带斜杠,否则请求会 404】。例如写成 https://packages.yourcorp.com(缺斜杠)将无法获取 packages.json。
配置认证凭据
第一步:判断是否需要认证
访问 https://packages.yourcorp.com/packages.json,若浏览器弹出登录框或返回 401,则需配置凭证。
第二步:选择认证方式
HTTP Basic 认证(用户名/密码)执行:
composer config http-basic.packages.yourcorp.com your-username your-password
bearer token 认证执行:
composer config bearer-token.packages.yourcorp.com your-api-token-here
这两条命令会把凭据写入当前项目根目录下的 auth.json(该文件应被 gitignore 排除,切勿提交)。【不要用 --global 参数,否则会污染其他项目】。
安装私有包并验证
第一步:运行安装命令
假设私有包名为 yourcorp/utils,版本为 dev-main:
composer require yourcorp/utils:dev-main
第二步:检查 vendor 目录是否生成
执行后查看 vendor/yourcorp/utils 是否存在。若不存在,说明 Composer 没走你配的源——大概率是 repositories 键名写错(比如写成 repo 或 repos)、URL 不可达,或认证失败未报明显错误。
第三步:强制重生成锁文件
修改完 repositories 或 auth.json 后,必须删掉 composer.lock 并重新运行:
rm composer.lock && composer install --no-dev --optimize-autoloader
不删 lock 文件,Composer 仍会沿用旧记录里的源地址,导致配置看似生效实则无效。











