Composer多仓库配置必须用索引数组,顺序即优先级;type必须正确匹配源类型(composer/vcs/package),且需显式设置"packagist.org": false禁用默认源,否则包可能从错误源拉取或静默失败。

repositories 数组必须是索引数组,顺序即优先级;配错类型或漏禁用 packagist.org,包大概率从错误源拉取,甚至静默失败。
repositories 必须写成 JSON 数组,不能是对象
很多人复制配置时误把 repositories 写成键值对(如 {"myrepo": {"type": "composer", ...}}),这会导致 Composer 只识别最后一个仓库,前面的全被忽略。
- ✅ 正确写法:
"repositories": [ {"type": "composer", "url": "..."}, {"type": "vcs", "url": "..."} ] - ❌ 错误写法:
"repositories": { "a": {"type": "..."}, "b": {"type": "..."} }(JSON 对象无序,Composer 不保证遍历顺序) - ⚠️ 特殊项
"packagist.org": false必须和repositories同级,不能塞进某个仓库对象里
type 选错,URL 再对也找不到包
type 不是可选项,它决定了 Composer 怎么解析 url:填错就等于协议不匹配,请求发错地方。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
type: "composer"→url必须指向一个能返回packages.json的 HTTP 服务(如 Satis、Private Packagist、阿里云镜像) -
type: "vcs"→url必须是可 clone 的 Git/SVN 地址(如https://gitlab.com/org/pkg.git或git@gitlab.com:org/pkg.git),Composer 会去里面读composer.json -
type: "package"→ 手动写死单个包的name、version、dist.url,不支持@dev这类别名,维护成本高,慎用 - 常见错误:把私有 Packagist 的 URL 配成
vcs类型,结果 Composer 尝试git clone一个 HTML 页面,报Could not find package packagist.org
为什么 require 私有包还是走 Packagist?
因为默认情况下,packagist.org 是隐式兜底源——它永远排在你所有显式声明的 repositories 之后。哪怕你只加了一个私有源,只要没关掉它,同名包仍可能被官方旧版覆盖,或因认证失败后 fallback 到公开源。
- 必须显式禁用:
"packagist.org": false(注意:这是composer.json根级字段,不是repositories里的某一项) - 如果还想用公共包(如
monolog/monolog),得手动把官方源加回来,并放在repositories数组末尾 - 推荐结构:
repositories中私有源靠前,最后显式加一条{"type": "composer", "url": "https://packagist.org"} - 否则会出现:私有包装不上,通用包也装不上
composer install 不拉新仓库内容?锁文件在“守旧”
composer.lock 锁死了具体版本、dist.url 和源地址。改了 repositories 配置,install 不会重新解析元数据——它只按 lock 文件里记的地址下载。
- 现象:切了私有源地址或换了 Git 分支,
composer install没反应,composer update才触发重解析 - 安全做法:
composer update --lock—— 只更新 lock 文件里的源信息,不改动已安装包 - 危险做法:删
composer.lock后重install—— 生产环境慎用,会重算整个依赖图 - 若私有源需认证(HTTP Basic / OAuth / SSH),确保
auth.json已就位,否则update会在 401 处卡住
"packagist.org": false 这一行——它不在 repositories 里,却决定整个多源逻辑是否真正生效。

















