Добрый день. Столкнулся с непонятной для себя проблемой при работе с composer.
Сделал пару примитивных бандлов BaseBundle и SpecificBundle. Оба их выложил на github. При этом SpecificBundle имеет зависимость от BaseBundle:
BaseBundle/composer.json:
{
"name": "my-vendor/my-base-bundle",
"type": "symfony-bundle",
"version": "1.0.0",
"license": "proprietary",
"minimum-stability": "dev",
"prefer-stable": true,
"authors": [
{
"name": "Author name",
"email": "author_email@mail.ru"
}
],
"require": {
"php": ">=8.0",
"ext-ctype": "*",
"ext-iconv": "*",
"doctrine/doctrine-bundle": "^2.14",
"nelmio/api-doc-bundle": "^5.3",
"symfony/asset": ">=5.4",
"symfony/console": "7.3.*",
"symfony/dotenv": "7.3.*",
"symfony/flex": "^2",
"symfony/framework-bundle": "7.3.*",
"symfony/runtime": "7.3.*",
"symfony/twig-bundle": ">=5.4",
"symfony/yaml": "7.3.*"
},
"config": {
"sort-packages": true,
"allow-plugins": {
"symfony/flex": true,
"symfony/runtime": true
}
},
"autoload": {
"psr-4": {
"MyVendor\\MyBaseBundle\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"MyVendor\\MyBaseBundle\\Tests\\": "tests/"
}
},
"extra": {
"symfony": {
"allow-contrib": false,
"require": ">=5.4"
}
}
}
SpecificBundle/composer.json:
{
"name": "my-vendor/my-specific-bundle",
"type": "symfony-bundle",
"version": "1.0.0",
"license": "proprietary",
"minimum-stability": "dev",
"prefer-stable": true,
"authors": [
{
"name": "Author name",
"email": "author_email@mail.ru"
}
],
"require": {
"php": ">=8.0",
"ext-ctype": "*",
"ext-iconv": "*",
"my-vendor/my-base-bundle": ">=1.0",
"symfony/console": "7.3.*",
"symfony/dotenv": "7.3.*",
"symfony/flex": "^2",
"symfony/framework-bundle": "7.3.*",
"symfony/runtime": "7.3.*",
"symfony/yaml": "7.3.*"
},
"config": {
"sort-packages": true,
"allow-plugins": {
"symfony/flex": true,
"symfony/runtime": true
}
},
"autoload": {
"psr-4": {
"MyVendor\\MySpecificBundle\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"MyVendor\\MySpecificBundle\\Tests\\": "tests/"
}
},
"extra": {
"symfony": {
"allow-contrib": false,
"require": ">=5.4"
}
},
"repositories": {
"my-base-bundle": {
"type": "vcs",
"url": "https://github.com/my-vendor/my-base-bundle.git"
}
}
}
В приложении подключаю репозиторий SpecificBundle:
app/composer.json
{
...
"repositories": {
"my-specific-bundle": {
"type": "vcs",
"url": "https://github.com/my-vendor/my-specific-bundle.git"
}
}
...
}
Затем выполняю
composer require my-vendor/my-specific-bundle. Composer начинает разрешение зависимостей, находит SpecificBundle:
Root composer.json require my-vendor/my-specific-bundle * -> satisfiable by my-vendor/my-specific-bundle[1.0.0]
а далее идет ошибка:
my-vendor/my-specific-bundle 1.0.0 requires my-vendor/my-base-bundle ^1.0 -> could not be found in any version, there may be a typo in the package name
Почему composer не находит BaseBundle, если его принудительно не указать в app/composer.json?
Никаких проблем с наименованием репозитория BaseBundle нет - если зайти в каталог SpecificBundle и там выполнить
composer require my-vendor/my-base-bundle, никаких проблем нет - всё работает. Сами репозитории публичные, проблем с доступом нет. Теги присутствуют. Даже пробовал делать релизы - не помогает. Также не помогает указывать тип репозитория как path с относительным и абсолютным путём.
На запрос о composer и репозиториях выдает базовую информацию
https://getcomposer.org/doc/05-repositories.md, в которой нет даже намека, почему при указании обоих репозиториев в app/composer.json всё работает