На момент написания статьи в 2013 году это был один из способов сделать это. Композитор добавлена поддержка более эффективных способов: См @igorw «s ответ
У ВАС ЕСТЬ Хранилище?
Composer поддерживает Git, Mercurial и SVN.
У ВАС ЕСТЬ ДОСТУП ДЛЯ ЗАПИСИ В ХРАНИЛИЩЕ?
Да?
ЕСТЬ ЛИ В РЕПОЗИТОРИИ composer.json
ФАЙЛ
Если у вас есть репозиторий, в который вы можете писать: Добавьте composer.json
файл или исправьте существующий, и НЕ используйте решение ниже.
Перейти к @igorw «s ответ
ИСПОЛЬЗУЙТЕ ЭТО ТОЛЬКО ЕСЛИ У ВАС НЕТ РЕПОЗИТОРИЯ
ИЛИ ЕСЛИ В РЕПОЗИТОРИИ НЕТ composer.json
И ВЫ НЕ МОЖЕТЕ ДОБАВИТЬ ЕГО
Это переопределит все, что Composer может прочитать из исходного репозитория composer.json
, включая зависимости пакета и автозагрузку.
Использование package
шрифта переложит на вас бремя правильного определения всего. Более простой способ - иметь composer.json
файл в репозитории и просто использовать его.
Это решение действительно только для тех редких случаев, когда у вас есть заброшенная загрузка ZIP, которую вы не можете изменить, или репозиторий, который вы можете только читать, но он больше не поддерживается.
"repositories": [
{
"type":"package",
"package": {
"name": "l3pp4rd/doctrine-extensions",
"version":"master",
"source": {
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git",
"reference":"master"
}
}
}
],
"require": {
"l3pp4rd/doctrine-extensions": "master"
}
composer.json
, поэтому используйте репо vcs. В вашем примере также нарушается автозагрузка и игнорируется расширениеbranch-alias
.autoload
поле, оно не будет включено. В основном вам нужно скопировать и вставить всю информацию изcomposer.json
определения репо. Репозиторий VCS получает эту информацию напрямую из VCS. Преимуществаbranch-alias
описаны в документации по псевдонимам и в моем блоге .Этот пакет на самом деле доступен через упаковщиков . В этом случае вам не нужно настраивать определение репозитория. Просто убедитесь, что вы добавили
require
(который всегда нужен) с подходящим ограничением версии.В общем, если пакет доступен на packagist, не добавляйте репозиторий VCS. Это просто замедлит процесс.
Для пакетов, которые недоступны через packagist, используйте репозиторий VCS (или git), как показано в вашем вопросе. Когда вы это сделаете, убедитесь, что:
require
пакет для рассматриваемого пакетаrequire
совпадениях с версиями, предоставленными репозиторием VCS. Вы можете использоватьcomposer show <packagename>
для поиска доступных версий. В этом случае~2.3
будет неплохой вариант.require
совпадает с именем в пульте дистанционного управленияcomposer.json
. В данном случае это такgedmo/doctrine-extensions
.Вот пример,
composer.json
который устанавливает тот же пакет через репозиторий VCS:Документы репозитория VCS достаточно хорошо все это объясняют.
Если есть репозиторий git (или другой VCS) с
composer.json
доступным, не используйте репозиторий «пакетов». Репозитории пакетов требуют, чтобы вы предоставили все метаданные в определении, и полностью игнорируют любыеcomposer.json
присутствующие в предоставленных dist и source. У них также есть дополнительные ограничения, такие как запрет на правильные обновления в большинстве случаев.Избегайте репозиториев пакетов ( см. Также документацию ).
источник
composer.json
.require
поле должно быть указано.The VCS repo docs explain all of this quite well.
... какие?Вы можете включить репозиторий git в composer.json следующим образом:
источник
composer.json
файл, если это вообще возможно.Просто скажите композитору использовать исходный код, если он доступен:
Или:
Тогда вы получите пакеты в виде клонированных репозиториев вместо извлеченных архивов, чтобы вы могли внести некоторые изменения и зафиксировать их обратно. Конечно, при условии, что у вас есть разрешения на запись / отправку в репозиторий, а Composer знает о репозитории проекта.
Отказ от ответственности: я думаю, что могу ответить на немного другой вопрос, но это было то, что я искал, когда нашел этот вопрос, поэтому я надеюсь, что он будет полезен и другим.
Если Composer не знает, где находится репозиторий проекта, или у проекта нет подходящего composer.json, ситуация немного сложнее, но другие уже ответили на такие сценарии.
источник
Я столкнулся со следующей ошибкой:
The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Если вы создаете другое репо, чтобы внести свои собственные изменения, у вас будет новый репозиторий.
Например:
Новый URL-адрес должен войти в раздел ваших репозиториев вашего composer.json.
Помните, что если вы хотите ссылаться на свою вилку, как
my-foo/bar
в разделе требований, вам придется переименовать пакет вcomposer.json
файле внутри вашего нового репо.Если вы только что создали форк, самый простой способ сделать это - отредактировать его прямо в github.
источник
name
внутри атрибутаcomposer.json
.В моем случае я использую Symfony2.3.x, и параметр минимальной стабильности по умолчанию "стабильный" (что хорошо). Я хотел импортировать репо не в packagist, но имел ту же проблему: «Ваши требования не могут быть решены для устанавливаемого набора пакетов». Оказалось, что composer.json в репозитории, который я пытался импортировать, использует "dev" с минимальной стабильностью.
Поэтому, чтобы решить эту проблему, не забудьте проверить файл
minimum-stability
. Я решил это, потребовавdev-master
версию,master
а не указанную в этом сообщении .источник
"dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
.Если вы хотите использовать
composer.json
из GitHub, вы должны посмотреть этот пример (в разделе VCS).Раздел пакетов предназначен для пакетов, у которых нет
composer.json
. Однако вы тоже не последовали этому примеру, иначе он бы тоже сработал. Прочтите, что там говорится о репозиториях пакетов:источник
Я пытаюсь присоединиться к упомянутым здесь решениям, поскольку есть некоторые важные моменты, которые необходимо перечислить.
Как упоминалось в ответе @ igorw, URL-адрес репозитория в этом случае должен быть указан в файле composer.json, однако, поскольку в обоих случаях composer.json должен существовать (в отличие от 2-го способа @Mike Graf), публикация его в Packagist является не сильно отличается (кроме того, Github в настоящее время предоставляет услуги пакетов как пакеты npm), разница только вместо того, чтобы буквально вводить URL-адрес в интерфейсе packagist после регистрации.
Более того, у него есть недостаток, заключающийся в том, что он не может полагаться на внешнюю библиотеку, которая использует этот подход, поскольку рекурсивные определения репозитория не работают в Composer. Кроме того, из-за этого, похоже, в нем есть "ошибка", поскольку рекурсивное определение не удалось в зависимости, повторное определение репозиториев явно в корне кажется недостаточным, но также все зависимости из пакетов должны будут быть уточненным.
С файлом композитора (ответ дан igorw 18 окт.
Без файла композитора (ответил Майк Граф 23 янв.
источник