Здравствуйте!
Во время разработки пакета (
пакет_№_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"}
],
то всё работает и пакеты подтягиваются. Но смысл дублировать ссылку на пакет, когда данная ссылка уже есть в подтягиваемом пакете.