composer.json中存在重复repositories键时,Composer会采用哪一个?
Composer处理重复
repositories键的行为说明及修复方案 首先直接给你明确答案:当composer.json里出现重复的repositories键时,Composer会完全忽略前面的所有重复项,只使用最后出现的那个键对应的配置数组,不会对多个数组进行任何合并操作。
为什么你的包现在还能正常运行?
你看到composer validate报错是因为重复键不符合JSON规范(Composer对这种情况会严格提示错误),但实际运行时,Composer依赖的JSON解析器遵循“最后出现的键覆盖前面”的通用规则。所以你示例里的第一个repositories数组(包含foo仓库和禁用packagist的配置)其实根本没在生效,当前包的运行依赖的是第二个repositories数组里的配置。
重构方案(不改变运行行为)
根据你的需求,要删除未被使用的重复键,直接删掉第一个repositories键即可——因为它本来就没在生效,删除后完全不会影响现有运行行为,同时还能消除composer validate的错误。
如果之后你发现其实需要保留第一个数组里的配置(比如之前误以为这些配置在生效,但实际没有),那正确的做法是把两个repositories数组合并成一个,像这样:
{ "name": "foo/bar", "description": "foo bar", "license": "Apache-2.0", "type": "library", "repositories": [ {"type": "composer", "url": "foo"}, {"packagist.org": false}, { "type": "vcs", "url": "bar" } ], ... }
内容的提问来源于stack exchange,提问作者John Walker
相关产品推荐
相关产品推荐

