repositories字段必须是项目根目录composer.json顶层的索引数组,写在config或extra中、或写成对象/字符串均无效;顺序决定查找优先级,私有源须置顶并显式添加{"packagist.org": false}独立项。

repositories字段必须是数组,且位置不能错
Composer 只认项目根目录 composer.json 顶层的 repositories 字段,写在 config、extra 或嵌套对象里就等于没写——不报错,但完全失效。
它必须是 JSON 数组,不是对象,也不是字符串:
[{"type": "vcs", "url": "https://gitlab.corp/logger"}]
不是:
{"type": "vcs", "url": "https://gitlab.corp/logger"}
也不是:
"repositories": "https://gitlab.corp/logger"
- 写错格式时,
composer install会静默跳过,仍从 packagist.org 查包 - 用
composer config --list看不到你配的源,说明它根本没被加载 - 中文环境下尤其容易因编辑器自动补全或复制粘贴带 BOM/全角空格导致解析失败
vcs 类型下 URL 和包名大小写必须严格一致
Composer 对 name 字段大小写敏感,且不会自动转换。如果你私有仓库的 composer.json 里写的是 "name": "Corp/Logger",那么 require 里就必须写 "Corp/Logger": "^1.0",写成 corp/logger 就直接报 Could not find package。
常见错误场景:
- Git 仓库 URL 是
https://gitlab.corp/CORP/logger,但包名用了小写 - 本地开发时习惯用小写命名空间,但 CI 构建环境区分大小写,导致线上失败
- Windows 下文件系统不区分大小写,开发时能跑通,Linux 部署后报错
验证方式:进私有仓库目录,执行 cat composer.json | grep name,确认输出和 require 中完全一致。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
多个 repository 共存时顺序决定查找优先级
Composer 按 repositories 数组顺序逐个尝试,**找到第一个匹配的包就停止**,不会合并结果。这意味着:
- 私有源必须放在数组最前面,否则同名包会被 packagist.org 拦截
- 显式禁用默认源必须作为独立项写入:
{"packagist.org": false},不能合并进其他对象 - 如果既要私有源又要部分公开包,得手动把官方源加回来,写在最后:
{"type": "composer", "url": "https://packagist.org"}
错误写法示例:
[{"type":"vcs","url":"..."},{"type":"composer","url":"https://packagist.org"}]
这样会导致私有包永远找不到——因为 packagist.org 在第二位,但 Composer 已在第一位匹配失败后直接放弃,不会继续往后看。
中文路径或含中文字符的 URL 会触发解析失败
Composer 内部使用 PHP 的 parse_url() 和 cURL 处理 URL,对 UTF-8 编码支持有限。若 url 包含中文路径(如 https://git.example.com/内部组件/logger),大概率触发 Invalid URL 或 Connection refused 错误,而非明确提示“不支持中文”。
实操建议:
- 所有
url值必须是 ASCII 字符,包括 Git 仓库地址、Satis 服务地址、本地path的相对路径(避免./我的组件) - 本地调试用
path类型时,路径名也需纯英文,比如"../my-logger",而非"../日志组件" - SSH 地址中用户名/主机名含中文?换为 IP 或英文别名,或改用 HTTPS + token
这个限制在中文 Windows 环境下特别隐蔽——CMD 或 PowerShell 可能显示正常,但 Composer 进程实际运行时已解码失败。










