Задать вопрос
@d-virt

Как бороться с «no matching package found.» (при условии, что package реально существует)?

Здравствуйте!

Во время разработки пакета (пакет_№_1), бывает необходимость подключить другой пакет (пакет_№_2) в секцию require (P.S. НЕ В require-dev). В APP приложение я использую пакет_№_1 и знаю, что автоматически подтянется зависимый пакет_№_2 в моё приложение. Но, к сожалению, этого не происходит (т.е. при установки пакета не подтягяваются его зависимости), по причине описанной ниже:

P.S. Я использую windows. Все пакеты расположены локально на диске.
P.S.S. иерархия папок:
../test.loc
..../laravel  (тут лежит приложение)
..../packages (тут лежат мои пакеты)
....../catalog (пакет каталога)
....../category (пакет категории)


composer.json - APP приложения
{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.6.4",
        "laravel/framework": "5.3.*",
        "test/catalog": "1.0.0" // прошу заметить, что тут я указываю конкретную версию
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~5.0",
        "symfony/css-selector": "3.1.*",
        "symfony/dom-crawler": "3.1.*",
        "barryvdh/laravel-ide-helper": "v2.2.1"
    },
    "repositories": [
        {"type": "git", "url": "C:\\web\\www\\test.loc\\packages\\test\\catalog"}
    ],
// .... я специально тут обрезал, т.к. далее идет запуск доп. скриптов и определение PSR4
}


composer.json - пакет_№_1 (catalog)
{
    "name": "test/catalog",
    "authors": [
        {
            "name": "test",
            "email": "test@test.ru"
        }
    ],
    "require": {
        "php": ">=5.6.4",
        "test/category": "1.0.0"
    },
    "repositories": [
        {"type": "git", "url": "C:\\web\\www\\test.loc\\packages\\test\\category"}
    ],
    "autoload": {
        "psr-4": {
            "Test\\Catalog\\": "src/"
        }
    },
    "minimum-stability": "dev",
    "extra": {
        "branch-alias": {
            "dev-master": "master"
        }
    }
}


composer.json - пакет_№_2 (category)
{
    "name": "test/category",
    "authors": [
        {
            "name": "test",
            "email": "test@test.ru"
        }
    ],
    "require": {
		"php": ">=5.6.4"
	},
    "autoload": {
        "psr-4": {
            "Test\\Category\\": "src/"
        }
    },
    "minimum-stability": "dev",
    "extra": {
        "branch-alias": {
            "dev-master": "master"
        }
    }
}


Если мы зайдем в пакет_№_1 (catalog) и выполним команду composer update - то, пакет_№_2 (category) автоматически подтянется в папку vendor (как бы тут всё работает корректно).

Если мы зайдем в приложение APP и выполним команду composer update, то выдает ошибку:
Loading composer repositories with package information
Reading composer.json of test/catalog (1.0.0)
Reading composer.json of test/catalog (@dev)
Reading composer.json of test/catalog (master)
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for test/catalog 1.0.0 -> satisfiable by test/catalog[1.0.0].
    - test/catalog 1.0.0 requires test/category 1.0.0 -> no matching package found.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.


Побывал делать:
composer clear-cache - не помогло.
composer prohibits test/catalog 1.0.0 - выдает ошибку (Could not find package "test/catalog" in your project )

Разумеется в репозиториях присутствуют все теги и актуальный composer.json:
test.loc/packages/catalog# git tag
1.0.0
test.loc/packages/category# git tag
1.0.0


Вопрос: уточните, пожалуйста, что я не так делаю ? Почему в APP не подтягивать зависимый пакет_№_2 (catalog) ?

Спасибо!

Самое забавное то, что если в APP приложение composer.json мы укажем:
"repositories": [
        {"type": "git", "url": "C:\\web\\www\\test.loc\\packages\\test\\catalog"},
        {"type": "git", "url": "C:\\web\\www\\test.loc\\packages\\test\\category"}
    ],

то всё работает и пакеты подтягиваются. Но смысл дублировать ссылку на пакет, когда данная ссылка уже есть в подтягиваемом пакете.
  • Вопрос задан
  • 1842 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@SilverSlice
Делайте стабильные релизы. Подробнее писал тут.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы