Когда «Ключевые репозитории являются дубликатами в ./composer.json», какой из них используется composer? - PullRequest
1 голос
/ 09 марта 2020

Я заметил, что в моем composer. json есть дубликаты ключей 'репозиториев' для пакета, который я разрабатываю.

Пакет работает. Итак, я хотел бы выполнить «рефакторинг» в том смысле, что я хотел бы исправить код без изменения поведения.

Если я хочу исправить ошибку, мне придется удалить дублированный ключ, который НЕ используется.

Итак, вопрос:

Когда "хранилища ключей" является дубликатом в ./composer.json ", который используется composer?

Другими словами,

  • Использует ли composer первый ключ, который он находит и игнорирует будущие ключи?
  • Игнорирует ли он прежние ключи и использует последний ключ, который находит? ?

Это команда, которую я выполняю:

$ composer validate
Key repositories is a duplicate in ./composer.json at line 16
...

composer. json выглядит примерно так:

{
  "name": "foo/bar",
  "description": "foo bar",
  "license": "Apache-2.0",
  "type": "library",
  "repositories": [
    {"type": "composer", "url": "foo"},
    {"packagist.org": false}
  ],

  "repositories": [
    {
      "type": "vcs",
      "url": "bar"
    }
  ],

  ...
 }

1 Ответ

2 голосов
/ 09 марта 2020

Composer использует seld / jsonlint до для обнаружения дубликатов ключей, но использует json_decode для декодирования JSON.

json_decode использует последнее найденное значение для ключа:

>>> $json = '{"a":1,"a":10,"a":100}';
=> "{"a":1,"a":10,"a":100}"
>>> $decoded = json_decode($json)
=> {#3260
     +"a": 100,
   }
>>> $decoded->a
=> 100
...