Я использую Composer для проекта, который должен обрабатывать некоторые зависимости, но у меня очень странная проблема. Композитор игнорирует файл composer.json, содержащийся в дочерних пакетах.
Мой проект должен получить некоторые пользовательские почтовые пакеты, в этих пакетах файл composer.json определяет другие требования. Репозитории этих требований объявлены в корневом файле composer.json, так как Composer can not рекурсивно извлекает репозитории.
Дело в том, что после того, как мой zip-пакет загружен, распакован и помещен в каталог поставщика, композитор полностью игнорирует свой composer.json, где определены другие требования …
Почтовый архив выглядит примерно так:
Чтобы дать вам представление, вот как выглядит мой root composer.json:
{ "name": "myproject/project", "type": "library", "repositories": [ { "packagist" : false }, { "type": "package", "package": { "name" : "giulianobundles/mybundle", "version" : "1", "dist": { "url": "http://url/to/zip/file", "type": "zip" } } }, { "type": "package", "package": { "name" : "giulianobundles/mybundlerequirement", "version" : "1", "dist": { "url": "http://url/to/zip/file", "type": "zip" }, } }, ], "require": { "php": ">=5.3.2", "giulianobundles/mybundle": "*" }, "autoload": { "psr-0": { "config": "./" } }, }
и пакет composer.json пакета выглядит
{ "name": "giulianobundles/mybundle", "type":"library", "require": { "giulianobundles/mybundlerequirement": "1" } }
Пакет Mybundle успешно устанавливается, но его файл composer.json полностью игнорируется. Есть идеи? Что мне не хватает?
Действительно, Composer не будет рекурсивно смотреть на файлы composer.json в файловой системе . Он должен видеть файлы composer.json в репозитории . Обычно он работает, так как у пакета есть URL-адрес git или svn. Композитор будет извлекать, например, git://<host>/<package>/composer.json
непосредственно из репозитория, чтобы выяснить зависимости этого пакета, прежде чем он будет установлен даже для вычисления общих зависимостей.
В вашем случае вы определяете package
inline в своем собственном файле composer.json. Это используется вместо файла composer.json в зависимости . Это означает, что Composer принимает "package": { ... }
чтобы быть каноническим файлом composer.json для этого пакета, он не будет рассматривать сам код; особенно после его распаковки. Он обрабатывает Zip-файл, как будто у него не было собственного файла composer.json.
Определите зависимости в "package": { ... }
или разместите код в системе управления версиями, из которой Composer может извлечь файл composer.json.