Composer不支持中文type,仅接受vcs、composer、package、artifact、path五种小写英文类型;填中文或其他非法值会静默跳过,导致仓库失效;正确扩展需用vcs+插件注册协议前缀,或选用artifact/composer类型实现内网分发。

Composer 不支持“中文 type”,所谓“中文自定义 Repository 驱动”是配置误用的典型结果——你填的 "type": "私有源" 或 "type": "内网仓库" 会被完全忽略,不报错、不警告,只静默跳过。
为什么写中文 type 会静默失效
Composer 在解析 repositories 时,对 type 字段做硬编码校验,仅接受以下五种字符串:vcs、composer、package、artifact、path。任何其他值(包括中文、拼音、带空格或连字符的英文)都会被直接丢弃:
- 填
"type": "git-internal"→ 跳过该仓库,composer install仍走packagist.org(除非已禁用) - 填
"type": "私有源"→ 同样跳过,Could not find package xxx错误实际源于此 - 即使你写了合法 URL 且能手动 curl 通,Composer 根本不会尝试访问它
想支持新协议(如 gitlab-ssh://),必须用 vcs + 插件注册
真正可行的扩展方式,不是改 type,而是让 Composer 在 "type": "vcs" 下识别你自定义的 URL 协议前缀:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 你的仓库配置仍必须是:
{"type": "vcs", "url": "gitlab-ssh://gitlab.example.com/group/pkg.git"} - 插件中调用
RepositoryManager::addRepositoryClass('gitlab-ssh', MyGitlabSshDriver::class),第一个参数是协议前缀(小写、无冒号) -
MyGitlabSshDriver必须完整实现VcsDriverInterface,包括getBranches()、getTags()、getDist()等方法 - 类必须可自动加载,插件需通过
composer require安装到项目中,否则activate()不会执行
artifact 和 composer 类型才是内网分发的主力方案
如果你的目标是断外网环境下的包分发,vcs 类型依赖网络可达性,反而不如以下两种稳定:
-
artifact:把所有.zip放本地目录(如./packages/),文件名必须为vendor-name-version.zip(全小写、中划线、无v前缀),且压缩包内composer.json的name和version必须与文件名严格一致 -
composer:部署 Satis 或 Artifactory,URL 指向返回标准packages.json的 HTTP 接口,并在repositories中显式设"packagist.org": false - 两者都要求禁用默认源:
composer config --global repo.packagist false,否则优先走官方源
最容易被忽略的两个硬条件
无论选哪种方案,漏掉任意一条,整个自定义仓库就形同虚设:
-
repositories必须是 JSON 数组,不能是对象;每项必须含type和url,且type必须拼写准确、全小写、无空格 - 私有源的认证凭据只能通过
auth.json(权限600)提供,绝不能拼进 URL,也不能写进composer.json
真正的“中文适配”不是改 type,而是把错误提示、文档和团队沟通统一到这五个合法值上——vcs、composer、package、artifact、path,少一个字母都不行。

















