Laravel 5.1 Package Development - загрузка зависимостей пакетов в разработке

Привет я пытаюсь разработать пакет в Laravel 5.1. Благодаря помощи здесь у меня есть основы.

моя текущая проблема заключается в том, как загружать зависимости для пакета во время его разработки.

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

вот мой раздел require пакетов composer.json:

"require": {
"illuminate/support": "~5.1",
"php" : ">=5.3.0",
"google/apiclient": "dev-master"
},

поскольку они не являются частью основного процесса автоматической загрузки, каков наилучший подход к обеспечению правильной загрузки зависимостей для моего пакета из папки разработки? Как включить автозагрузку? Я обеспокоен тем, что если я ссылаюсь на их текущее местоположение/пространство имен, которое он сломает, когда позже будет установлен как пакет в другом приложении.

в моем коде у меня есть следующие:

$client = new Google_Client($config);

что дает ошибка:

Class 'Google_Client' not found

Я могу обойти это, добавив эту зависимость к основному композитору.json, но не думаю, что это правильный подход, чтобы держать разработку пакета независимой (если это имеет смысл)

когда я развивался в L4.2 был верстак, который позаботился о загрузке, которая, конечно, больше не работает в L5.1

любая помощь и лучшая практика оценили

1 ответов


потому что они не являются частью основного процесса автозагрузки

Я думаю, вы неправильно поняли, как управляются зависимости композитора. Когда в основной текст.JSON-файл вы перечисляете зависимость, composer добавит его в основной процесс автозапуска, а также все их зависимости и зависимости их зависимостей и так далее рекурсивно.

вам не нужно беспокоиться о том, где хранятся зависимости или как Composer их загрузит. Composer автоматически добавит их в файл автозапуска и все, что вам нужно сделать, это убедиться, что вам нужен композитор автозагрузку файл. Как только вам потребуется файл автозапуска composer, будут доступны все классы и функции, загруженные composer. Все, что вам нужно сделать, чтобы использовать классы из любого из установленных пакетов, - это убедиться, что вы обращаетесь к ним с помощью соответствующего пространства имен. Композитор достаточно умен, чтобы знать, где все классы хранятся и как их загрузить (то есть какие psr-0, psr-4,... за).

поэтому, если вы разрабатываете пакет Composer, давайте назовем его "A", и вы перечислите пакет " C "как одну из зависимостей вашего пакета "A", composer добавит его в файл автозапуска для вас. Если вы используете другой пакет, скажем, Laravel, который имеет зависимость от вас пакет "A", то также пакет " C "будет доступен в Laravel, так как это зависимость от "A".

т. е.: если это ваш композитор.файл json

{
    "name": "foo/bar",
    "require": {
        "google/apiclient": "1.0.*"
    }
}

этот код будет работать

require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$youtube = new Google_Service_YouTube($client);

обратите внимание, я требовал композитор файл автозагрузки, который, кажется, вашу проблему. Когда вы используете Laravel, он добавит этот файл для вас.