composer的path仓库不支持versions选项,因其设计目标是本地文件系统映射而非远程包发现;它仅读取指定目录下composer.json的version字段(或fallback为dev-main),不解析git标签,故该字段被忽略且不报错。

Composer 的 path 类型仓库不支持 versions 选项——它根本不存在于官方 schema 中,任何在 repositories 里为 path 仓库写 "versions" 字段的行为都会被 Composer 忽略,且不报错。
为什么 path 仓库没有 versions 配置项
path 类型仓库的设计目标是「本地文件系统映射」,不是远程包发现。Composer 不会扫描该目录下的所有 Git tag 或分支来构建版本列表,而是直接读取目标目录中 composer.json 文件的 version 字段(如果存在),或 fallback 到 dev-main / dev-master 这类开发分支别名。
- 它不解析 Git 引用,所以不需要、也不支持
versions这种声明式版本控制 - 所谓“可用版本”,完全取决于你本地目录里那个
composer.json的version值和你require中写的约束是否匹配 - 写
"versions": ["1.2.0", "dev-main"]这类配置纯属无效,Composer 启动时甚至不会校验它
想让 path 仓库支持多个版本怎么办
唯一可靠的方式是:用多个独立的 path 条目,每个指向不同路径(或通过符号链接切换),并显式声明 package 元数据。例如:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{
"repositories": [
{
"type": "package",
"package": {
"name": "myorg/sdk",
"version": "1.2.0",
"dist": {
"url": "/path/to/sdk-1.2.0.zip",
"type": "zip"
},
"autoload": {"psr-4": {"MyOrg\Sdk\": "src/" }}
}
},
{
"type": "path",
"url": "../sdk-dev"
}
]
}
- 第一个
package条目提供固定版本1.2.0,dist.url必须可访问(本地绝对路径也行) - 第二个
path条目指向当前开发中的源码目录,自动识别为dev-main - 两者共存时,Composer 按
repositories数组顺序匹配,前面的优先
require 里写什么版本才能命中 path 仓库
关键看目标目录下 composer.json 的内容和你写的约束是否兼容:
- 如果
../sdk-dev/composer.json里有"version": "dev-main",那么require写"myorg/sdk": "dev-main"或"dev-main as 1.2.0"才能命中 - 如果没写
version字段,Composer 默认认为它是dev-main,此时"myorg/sdk": "*"或"dev-main"都可以 - 写
"1.2.3"却不匹配?检查该目录下composer.json的name是否严格等于myorg/sdk,大小写和斜杠都不能错
真正容易被忽略的是:path 仓库的解析发生在 composer install 阶段,但它的 composer.json 不会被缓存——每次运行都重新读取。如果你在开发中频繁修改那个文件的 version 或 name,记得 composer update myorg/sdk 而不是只靠 install。










