Страница 1 из 2

Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.24, 10:59
shkarbatov
Всем привет.

У меня в проекте есть composer.json, так как composer не читает репозитории рекурсивно, приходится указать в основном файле все репы

Код: Выделить всё

{
    "repositories": [
        {"type": "vcs", "url": "https://git.test.ua/components/technical_session.git"},
        {"type": "vcs", "url": "https://git.test.ua/components/curl.git"}
    ],
    "require": {
        "shkarbatov/technical_session": "dev-master"
    },
    "minimum-stability": "dev"
}
--------------------------------------------
Есть пакет technical_session у которого свой composer.json

Код: Выделить всё

{
    "name": "shkarbatov/technical_session",
    "repositories": [
        {"type": "vcs", "url": "git@git.test.ua:components/curl.git"}
    ],
    "minimum-stability": "dev",
    "require-dev": {
        "shkarbatov/curl": "dev-master"
    },
    "autoload": {
        "psr-4": {
            "shkarbatov\\technical_session\\": ""
        }
    }
}
--------------------------------------------
У пакета technical_session в зависимостях есть пакет curl, вот composer.json этого пакета:

Код: Выделить всё

{
    "name": "shkarbatov/curl",
    "autoload": {
        "psr-4": {
            "shkarbatov\\curl\\": ""
        }
    },
    "minimum-stability": "dev"
}
--------------------------------------------
Вопросы:

1) Можно ли как-то указать в файле composer.json, который находится на проекте централизованный репозиторий, а не перечень зависимых пакетов:

Код: Выделить всё

{"type": "vcs", "url": "https://git.test.ua/components/technical_session.git"},
{"type": "vcs", "url": "https://git.test.ua/components/curl.git"}
2) При выполнении composer install у меня загружается только пакет technical_session, а пакет curl не подтягивается, но и ошибок при этом не каких нет, в чем может быть причина?

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.24, 19:55
samdark
Composer читает рекурсивно.

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.24, 20:05
unclead

Код: Выделить всё

 "repositories": [
        {"type": "vcs", "url": "git@git.test.ua:components/curl.git"}
    ],
 
repositories поддерживается только для головного composer.json.
Если он указан в зависимом пакете, то он не учитывается.
Сам с этим сталкивался и про это указано в офф. докуменатции

https://getcomposer.org/doc/faqs/why-ca ... rsively.md

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.24, 21:05
shkarbatov
Sam Dark писал(а):Composer читает рекурсивно.
К сожалению, нет.
https://getcomposer.org/doc/faqs/why-ca ... rsively.md

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.24, 21:06
shkarbatov
А на счет вопросов, есть у кого-то идеи?

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.25, 07:08
unclead
есть способ использовать satis как локальное зеркало репозиториев
http://code.tutsplus.com/tutorials/sett ... -net-36726

я поднимал у себя, конечно прироста в скорости обновления я не заметил, но отпала необходимость прописывать приватные репозитории в composer.json

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.25, 11:51
shkarbatov
unclead писал(а):есть способ использовать satis как локальное зеркало репозиториев
http://code.tutsplus.com/tutorials/sett ... -net-36726
Спасибо за ссылку, хорошая статья.
Но, не хотелось бы обвешивать проект лишней логикой, хотелось бы решить все с помощью композера.

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.25, 15:41
unclead
Спасибо за ссылку, хорошая статья.
Но, не хотелось бы обвешивать проект лишней логикой, хотелось бы решить все с помощью композера.
других способов нет, таковы ограничения composer.
Либо прописывать все приватные репозитории в repositories проектного composer.json либо использовать локальный composer/satis

P.S. хотя я могу и ошибаться и способ все же есть

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.25, 16:43
shkarbatov
Так я как раз и прописал оба репозитория.

Код: Выделить всё

"repositories": [
    {"type": "vcs", "url": "https://git.test.ua/components/technical_session.git"},
    {"type": "vcs", "url": "https://git.test.ua/components/curl.git"}
], 
Но у меня почему-то так не работает.

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.25, 17:43
samdark
Я как раз про satis или https://toranproxy.com/ с полноценными приватными пакетами...

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.25, 20:13
shkarbatov
Спасибо конечно. Но вся суть в том, что я могу прописать пакеты в основном файле проекта, то есть обойтись без satis.

Меня интересует в чем причина того, что у меня не подгрузился зависимый пакет, хотя его репозиторий указан.

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.26, 13:59
samdark
Если прописывать таким образом то да, composer не читает зависимости. Не знаю, специально или нет, но факт.

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.26, 17:04
shkarbatov
То есть решить данную проблему можно только с помощью satis или toranproxy, и посредством чистого composer - никак?

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.27, 07:25
unclead
То есть решить данную проблему можно только с помощью satis или toranproxy, и посредством чистого composer - никак?
ну либо ты можешь прописать все приватные зависимости в блок require/require-dev основного composer.json.
Не лучший вариант, но должен решить твою проблему.
Все таки composer это не серебряная пуля и имеет свои ограничения

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.27, 10:36
shkarbatov
Я в начале привел код с блоком require, там эти блоки прописаны, но оно не работает.

Код: Выделить всё

{
    "repositories": [
        {"type": "vcs", "url": "https://git.test.ua/components/technical_session.git"},
        {"type": "vcs", "url": "https://git.test.ua/components/curl.git"}
    ],
    "require": {
        "shkarbatov/technical_session": "dev-master"
    },
    "minimum-stability": "dev"
} 

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.27, 16:52
unclead
я имел в виду

Код: Выделить всё

{
    "repositories": [
        {"type": "vcs", "url": "https://git.test.ua/components/technical_session.git"},
        {"type": "vcs", "url": "https://git.test.ua/components/curl.git"}
    ],
    "require": {
        "shkarbatov/technical_session": "dev-master",
        "shkarbatov/curl": "dev-master"
    },
    "minimum-stability": "dev"
} 

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.27, 17:07
shkarbatov
Так это же не рекурсивное подключение =)

Я именно о рекурсивном говорю.

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.27, 17:17
unclead
А вообще я сейчас протестировал у себя и у меня зависимости подтянулись рекурсивно.
Возможно у тебя что-то не то с minimum-stability.
Правда я у себя указываю так

Код: Выделить всё

    "require": {
        "php": ">=5.4.0",
        "albatross/yii2-commons": "*",
        "ib/ib-address": "*",
        "ib/ib-rbac": "*",
        "ib/ib-common": "*"
    }, 
т.е. * вместо dev-master

На этом мои познания composer заканчиваются :)

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.27, 17:30
shkarbatov
У Вас тут либо нет вложенных зависимостей у указанных выше пакетов. Либо они есть, но находятся не в приватных репозиториях. С публичным репозиторием проблем нет =)

Re: Рекурсивное подключение пакетов через composer

Добавлено: 2015.04.27, 17:34
unclead
все есть :)

composer.json проекта

Код: Выделить всё

"repositories": [
        тут прописаны приватные репозитории, например
        {
            "url": "example.ru/ib/ib-users.git",
            "type": "git"
        },
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": "2.0.3",
        "yiisoft/yii2-bootstrap": "2.0.3",
        "yiisoft/yii2-jui": "2.0.3",
        "yiisoft/yii2-redis": "2.0.3",
        "yiisoft/yii2-swiftmailer": "2.0.3",
        "ib/ib-users": "*",
         ...
    }, 

а вот composer.json пакета ib-users

Код: Выделить всё

{
    "name": "ib/ib-users",
    ...
    "require": {
        "php": ">=5.4.0",
        "albatross/yii2-commons": "*",
        "ib/ib-address": "*",
        "ib/ib-rbac": "*",
        "ib/ib-common": "*"
    },
    "autoload": {
        "psr-4": {
            "ib\\users\\": ""
        }
    }
}