私有源配置必须用 repositories 数组而非 repo.packagist;需正确设置 type、url(含协议和末尾斜杠)、http-basic 域名精确匹配;混用时注意源顺序与服务端性能。

composer config repo.packagist 配置私有源时为什么没生效
私有仓库地址写进 repo.packagist 会直接被忽略——这个键名只认公共 Packagist 镜像,不支持私有源。你得用 repositories 数组,且必须显式指定 type 和 url。
常见错误包括:
-
repositories写成repository(少个 s),Composer 静默跳过 -
type漏写或写错,比如填git却没配vcs类型,或私有 Satis 镜像填了composer却 URL 不带packages.json路径 -
url缺协议(如写my-internal-mirror.com而非https://my-internal-mirror.com),或末尾没斜杠(https://mirror.example.com/composer❌ → 必须是https://mirror.example.com/composer/✅)
验证是否加载成功:运行 composer config repositories,输出里必须出现你配置的完整对象,不是空数组,也不是只显示键名。
私有仓库启用 HTTPS + Basic Auth 后仍 401 或超时
私有源若走 HTTPS Basic Auth,http-basic 配置必须和域名完全匹配。比如镜像域名为 https://packages.internal.company/,那配置就得是:
composer config -g http-basic.packages.internal.company username password
注意:packages.internal.company 是域名部分,不含 https:// 或路径;大小写敏感;子域名不自动继承(api.packages.internal.company 需单独配)。
容易踩的坑:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- CI 环境中用
sudo composer config -g写进了 root 用户配置,但实际执行的是普通用户,auth 信息读不到 - 密码含特殊字符(如
@、/、:)没做 URL 编码,导致解析失败 - 私有镜像服务未开启
allow-plugins(Composer 2.2+ 默认禁用),导致某些插件式仓库无法初始化
私有源 + 公共镜像混用时 vendor 下载卡在某个包
当 composer.json 同时定义了私有 repositories 和全局 repo.packagist,Composer 默认按顺序查源:先私有源 → 再 Packagist。如果私有源返回 404(而非 401 或 503),Composer 会等超时后才切到下一个源,造成“卡住”假象。
优化做法:
- 把私有源放在
repositories数组最前面,避免无谓等待 - 私有镜像服务端配置
packagist.org的 fallback 代理(如 Nginx 反向代理未命中包到官方源),减少客户端超时 - 加
-vvv看日志,确认卡住时请求发给了哪个域名;如果是私有域名但响应慢,说明是内网链路或服务性能问题,不是 Composer 配置问题 - 对明确只存在于私有源的包,加
"preferred-install": {"my-vendor/*": "dist"}强制走 zip,避开 Git 协议开销
CI 中私有仓库缓存失效的三个关键点
私有包缓存比公共包更难复用,因为默认缓存 key 依赖完整 URL,而内网域名在不同 CI 环境可能不同(packages.internal vs packages.ci.internal)。
必须手动对齐:
- 统一所有环境的私有源 URL,例如全用
https://packages.internal.company/,不要混用别名或 IP - 缓存目录必须挂载到本地 SSD,且路径固定(如
COMPOSER_CACHE_DIR=$HOME/.composer-cache),不能依赖默认~/.composer/cache(Docker 容器中常为空) - CI 脚本中删
vendor/和composer.lock后,必须跑composer install --no-cache --prefer-dist,否则旧 lock 文件里残留的 dist URL 仍指向老域名,缓存不命中
私有源加速最不可控的一环,其实是服务端本身——哪怕配置全对,如果私有镜像没开 OPcache、没配 CDN、没做包文件预热,客户端再怎么调参数也白搭。先确认服务端响应 packages.json 在 200ms 内,再优化客户端。










