私有仓库不生效主因是repositories未置顶、type类型错误或漏设"packagist.org": false;composer严格按数组从上到下线性匹配,首个匹配即终止,不fallback。

私有仓库配不生效,八成是 repositories 没放对位置、type 写错类型,或者漏了 "packagist.org": false —— Composer 不会报错,只会安静地从官方源装错包。
repositories 必须是数组且首位生效
Composer 查包是线性短路匹配:从 repositories 数组第一个元素开始,包名一匹配就停,后面全跳过。这不是 fallback,是硬截断。
- 私有包如
acme/internal-tool必须放在repositories数组最前面,否则可能被后面的 packagist.org 或镜像覆盖 - 写成对象形式(如
"my-repo": { "type": "composer", ... })会导致只生效最后一个——必须用方括号[],每项是独立对象 - 全局配置(
~/.composer/config.json)会被项目级composer.json完全覆盖,不叠加
type 写错等于白配
type 不是标签,而是协议绑定。填错类型,URL 再对也查不到包,且常无明确报错。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"type": "composer"→ 指向完整索引服务(如 Satis、Private Packagist),Composer 会请求packages.json并读 providers 列表;url必须以/结尾(如"https://satis.internal/"),否则拼出的路径是.../packages.json变成...packages.json(404) -
"type": "vcs"→ 指向 Git/SVN 地址(如"https://gitlab.example.com/org/pkg"),别加.git后缀;Composer 只对该仓库根目录下的composer.json生效,且仅当require的包名与该文件中"name"字段完全一致时才触发 -
"type": "package"→ 手动声明单个包的版本、dist URL 和 autoload,不支持自动版本发现,维护成本高,慎用
认证凭据只能走 auth.json,且权限必须是 600
HTTPS 私有源(GitLab/GitHub/Satis)需要凭据,但绝不能拼进 URL(如 https://token@),也不能写进 composer.json。唯一合法载体是 auth.json。
-
auth.json必须放在项目根目录(与composer.json同级)或$COMPOSER_HOME目录下 - Linux/macOS 权限必须是
600,否则 Composer 静默忽略,不报错也不提示 - 内容结构为标准 JSON:
"http-basic"和"github-oauth"是平级字段;例如:{"http-basic": {"satis.internal": {"username":"deploy","password":"xxx"}}} - SSH 方式(如
git@gitlab.com:org/pkg.git)不依赖auth.json,但要求当前用户已将对应私钥加载进ssh-agent
禁用 packagist.org 不是可选项,是必做动作
一旦定义了 repositories 数组,Composer 就隐式设 "packagist.org": false。这意味着:composer require monolog/monolog 会直接失败,除非你手动加回。
- 要禁用官方源(防污染/强制走私仓):在
composer.json根级加"packagist.org": false(注意:不是放进repositories数组里) - 要保留官方源作 fallback:在
repositories数组末尾加{"packagist.org": true},不能写{"type": "composer", "url": "https://packagist.org"},后者会冲突 - 改完务必执行
composer clear-cache,否则旧元数据还在缓存里,install还是拉错包
最容易被忽略的是:vcs 类型仓库的版本完全不看自身 composer.json 里的 version 字段,只认 Git tag —— 没打 v1.0.0,"^1.0" 就永远找不到包。










