Composer多仓库配置必须同时满足顺序优先、type与url严格匹配、显式禁用packagist.org;repositories须为JSON数组,禁止对象写法,“packagist.org”: false须作为独立数组项,且更新源需执行composer update --lock。

配多个源不是加几个 URL 就行,顺序、类型、禁用默认源三者必须同时到位,否则要么私有包拉不到,要么公共包装不上。
repositories 数组必须是 JSON 数组,不能写成对象
常见错误是把 repositories 写成键值对对象(比如 {"my-repo": {...}}),这会让 Composer 忽略部分配置甚至静默失败。它只认标准 JSON 数组,且严格按从左到右顺序扫描。
- ✅ 正确写法:
"repositories": [ { "type": "composer", "url": "https://pkgs.internal" }, { "packagist.org": false } ] - ❌ 错误写法:
"repositories": { "internal": { "type": "composer", "url": "..." } }—— 这个会被完全跳过 - ⚠️ 特殊项
{"packagist.org": false}必须作为独立数组元素,不能塞进其他仓库对象里
type 选 composer 还是 vcs?看你是要索引还是单包
composer 类型源(如 Satis、Private Packagist)提供完整 packages.json,支持全局搜索;vcs 类型(如 Git)只在 require 明确写了同名包时才临时解析,不参与包发现。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 要让
composer require myorg/foo成功:私有源必须是type: "composer",且其packages.json里真有"myorg/foo"条目 - 若只配了
type: "vcs",即使 URL 能访问,require时也会报Could not find package - 混用可以,但行为割裂:
composer源管“所有包的元数据”,vcs源只管“我明确要的那个包”
packagist.org 不是默认开着的——它得你亲手关,也得你亲手开
一旦你声明了 repositories 数组,Composer 就**自动关闭隐式 packagist.org**。想继续用它,必须显式加回来;想彻底禁用它,必须加 {"packagist.org": false}。
- 只配私有源,不加 packagist.org → 连
monolog/monolog都装不上 - 只配私有源,也不加
{"packagist.org": false}→ 私有包可能被跳过,因为 packagist.org 在背后兜底 - 正确组合(私有优先 + 公共兜底):
[ { "type": "composer", "url": "https://pkgs.internal" }, { "type": "composer", "url": "https://packagist.org" } ] - 正确组合(纯私有环境):
[ { "type": "composer", "url": "https://pkgs.internal" }, { "packagist.org": false } ]
auth.json 放错位置或格式不对,401 就永远卡住
Composer 不会读 ~/.netrc 或 git credential,认证必须走 auth.json,且路径和字段名不能错。
- HTTP 类型私有源(如
https://pkgs.internal)必须用"http-basic"字段:{"http-basic": {"pkgs.internal": {"username": "...", "password": "..."}}} -
auth.json要么放在项目根目录(优先级高),要么放在COMPOSER_HOME(如~/.config/composer/auth.json) - Git 的 HTTPS 地址也走
http-basic;SSH 地址(git@)依赖系统 SSH Agent,不走auth.json - CI 环境中建议用项目级
auth.json并加密注入,避免依赖全局配置
最容易被忽略的是:改完 repositories 后,composer install 不会重新解析源,因为 composer.lock 锁死了 dist URL。要让新源生效,得跑 composer update --lock 或删 lock 后重装。

















