non-feature-branches 是 Composer 内部识别“稳定分支”的正则规则,默认匹配 main/master/stable 等;自定义分支如 release/2.5 需在 config 中配置转义正则(如 "release/2.5"),并配合别名(如 "dev-release/2.5 as 2.5.0")或 ~2.5.0@dev 约束使用,且必须运行 composer update --lock 更新锁文件。

什么是 non-feature-branches?
Composer 的 non-feature-branches 不是配置项,而是它内部对“非功能分支”的识别逻辑:当 Composer 解析版本约束(比如 dev-main 或 dev-stable)时,会检查分支名是否匹配预设的“非特性分支”正则,默认是 ^(?i)^(main|master|latest|stable|default|prod|production)$。只有命中这些名字的分支,才会被当作“稳定分支”处理——允许被 ^ 或 ~ 等语义化版本运算符匹配,否则一律视为不稳定开发分支(dev- 前缀),不参与版本比较。
如何让自定义分支(如 release/2.5)被当作 stable 分支?
不能靠改 composer.json 里的某个字段强行“标记”,必须修改 Composer 自身的分支识别规则。有两种方式:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局设置(影响所有项目):运行
composer config -g non-feature-branches '["release/2.5", "hotfix/.*"]'—— 注意正则需转义点号,且用单引号避免 shell 解析 - 项目级设置(推荐):在项目根目录
composer.json中添加:"config": { "non-feature-branches": ["release/2\.5", "hotfix/.*"] },然后执行composer update --lock刷新锁文件 - 不加
\.会被当成字面量.,导致release/2.5匹配失败;写成release/2.5(无转义)则正则语法错误
为什么 dev-release/2.5 还是装不了?
即使加了 non-feature-branches 配置,Composer 仍要求你显式使用分支别名(alias)或版本约束写法,否则它只认 dev- 前缀为开发分支。常见误区:
- 直接写
"vendor/pkg": "dev-release/2.5"→ 仍走 dev 分支逻辑,不触发语义化匹配 - 正确写法一(带别名):
"vendor/pkg": "dev-release/2.5 as 2.5.0",此时 Composer 把它当 2.5.0 版本解析 - 正确写法二(用分支名 + ~ 约束):
"vendor/pkg": "~2.5.0@dev",前提是该分支已配置进non-feature-branches且远程有对应 tag 或分支 - 如果远程只有
release/2.5分支、没有v2.5.0tag,~2.5.0@dev会 fallback 到该分支,但必须确保分支名在non-feature-branches列表中
实际使用中最容易漏掉的一点
修改 non-feature-branches 后,composer install 不会自动重解析 lock 文件里的分支记录——必须运行 composer update vendor/pkg --with-dependencies 或至少 composer update --lock,否则旧 lock 仍按原规则锁定为 dev- 版本,新配置无效。

















