Эта статья относится к подробной практической версии модульной разработки PHP на основе Composer, написанной Того.
Болевое пятно развития
Я верю, что многие люди , которые не знают композитора, сделают это при разработке пакета:
Create project (jcc/new-package) - > write business logic - > push to code warehouse - > create debugging project - > composer require jcc/new-package-vvv - > debug - > Modify project - > push update code - > update package code in debugging project - > composer update-vvv - >...
Поэтому очень сложно повторно отправлять и обновлять код, и его невозможно отладить в режиме реального времени.
В этой статье в основном рассматриваются следующие проблемы: Локальные пакеты разработки могут быть протестированы локально без отправки кода в стороннее хранилище кода, а затем composer require устанавливается в проект для тестирования:
Create project (jcc / New - package) - > write business logic - > create debugging project - > configure composer. JSON - > debug - > Modify project - > debug directly in debugging project - > debug directly in debugging project.
Можно видеть, что локальная разработка может сократить время выполнения кода для отправки git, сократить отправку каждой версии как можно меньше ошибок низкого уровня.
Принципы работы локальной разработки пакетов: Composer подключает локально разработанные пакеты из нового проекта (jcc/taxi) к проекту отладки (jcc/test-taxi/поставщик/jcc/texi) через мягкое соединение
В основном используется в репозиториях типа path, обновите информацию, пожалуйста, переместите документ
Пакет Composer для местного развития
Во-первых, давайте рассмотрим структуру установочного пакета Composer. При обычном использовании в качестве примера возьмите установку laravel/laravel. Откройте laravel в каталоге поставщиков, и вы увидите следующую структуру:
vendor/laravel ├── framework │ └── src │ └── Illuminate │ └── ... └── tinker └── src └── Console
Также посмотрите на пакеты зависимостей require или require-dev файла composer.json в проекте Laravel:
{ ..., "require": { "php": ">=7.0.0", "fideloper/proxy": "~3.3", "laravel/framework": "5.5.*", "laravel/tinker": "~1.0" }, ... }
Из этого мы можем знать, что структура каталогов соответствует друг другу.
Создавайте каталоги и инициализируйте их
Конечно, при инициализации создания каталога следует отметить, что имя проекта соответствует структуре каталога. Например, если мой новый проект-jcc/taxi, то созданная мной структура каталогов должна быть такой:
jcc └── taxi
Тогда нам нужно развиваться дальше в рамках taxi. Конечно, перед разработкой нам необходимо инициализировать конфигурацию composer и запустить ее в каталоге taxi.
composer init
Заполните информацию в соответствии с инструкциями.
Файл composer.json будет добавлен в каталог texi:
{ "name": "jcc/taxi", "description": "This is a test.", "type": "library", "license": "MIT", "authors": [ { "name": "jcc", "email": "[email protected]" } ], "minimum-stability": "dev", "require": {} }
Создайте каталог разработки и задайте необходимую информацию
Как правило, мы создаем два каталога: один-SRC для хранения всего логического кода пакета, а другой-тесты для хранения тестовых случаев:
jcc/taxi ├── src ├── tests ├── README.md ├── composer.json └── LICENSE
Обратите внимание, что нам нужно снова настроить конфигурацию автоматической загрузки composer в файле composer.json и добавить ее в файл composer.json:
{ ..., "autoload": { "psr-4": { "Jcc\Taxi\": "src/" } }, "autoload-dev": { "psr-4": { "Jcc\Taxi\Tests\": "tests/" } }, ... }
Подробнее о документах автоматической загрузки композитора
Создайте проект тестового пакета
Сначала создайте новый проект в каталоге JCC для тестирования:
jcc ├── taxi └── test-taxi
Затем инициализируйте конфигурацию composer и сгенерируйте файл composer.json:
composer init
Затем добавьте проект Репозиториев двумя способами:
Во-первых: запускайте команды напрямую
composer config repositories.jcc path /Users/jiajianchan/Sites/jcc/taxi
Второе: добавьте непосредственно в файл composer.json:
{ ..., "repositories": { "jcc": { "type": "path", "url": "/Users/jiajianchan/Sites/jcc/taxi" } } }
Тип-путь, а URL-адрес-относительный путь проекта.
Далее, есть два способа добавления зависимостей: Оболочка:
composer require jcc/taxi:dev-master -vvv
Добавить в composer.json:
{ ..., "require": { "jcc/taxi": "dev-master" }, ... }
Обратите внимание, конечно, что номер версии должен быть установлен в composer. JSON в атрибуте JCC/taxi project минимальная стабильность
, в противном случае номер версии не будет найден при установке пакета.
Разработка и тестирование
Во-первых, создайте Client.php файл в SRC в рамках проекта jcc/такси:
a = $a; $this->b = $b; } public function addTogether() { return $this->a + $this->b; } }
После установки проекта jcc/taxi в каталог jcc/test-taxi добавьте test.php файл:
// Introducing composer to automatically load files require __DIR__ . '/vendor/autoload.php' $client = new Jcc\Taxi\Client(5, 1); echo $client->addTogether() . "\n";
Наконец, запустите test.php файл в каталоге jcc/test-taxi для получения добавленных результатов:
php test.php
Если вы будете осторожны, вы обнаружите, что в каталоге поставщиков jcc/test-taxi jcc/такси
Зависимые проекты Мягкое подключение
. То есть вы находитесь в JCC/такси Client.php
Добавьте новый метод в файл и вызовите его в проекте JCC/test-taxi, не требуя пакета обновления composer. Очень удобно.
Локальное развитие пакета Laravel
Локальная разработка пакета Laravel в основном аналогична разработке пакета Composer. Давайте не будем напрягаться.
Сначала создайте новый проект Laravel:
composer create-project laravel/laravel laravel -vvv
Создайте следующие каталоги в проекте Laravel:
laravel ├── app ├── ... └── packages └── jcc └── taxi ├── LICENSE ├── README.md ├── composer.json ├── src │ ├── Taxi.php │ └── TaxiServiceProvider.php └── tests
jcc/такси (поставщик/название)
Для выпуска пакета нашего уровня, jcc
Соответствующего ____________ имя пользователя github
, такси
Соответствует ____________ Название проекта
。
Сначала инициализируйте конфигурацию composer, которая ничем не отличается от обычной разработки пакетов, а затем в разделе JCC/taxi src
создание каталогов TaxiServiceProvider.php
Документ:
app->singleton('taxi', function () { return new Taxi; }); } }
Установить Taxi.php
Документ:
Наконец, вы хотите, чтобы пакет был зарегистрирован в проекте laravel в config/app.php
Добавить в:
return [ ..., 'providers' => [ ..., Jcc\Taxi\TaxiServiceProvider::Class, ], ];
Модификация в рамках проекта laravel composer.json
Документ:
{ ..., "autoload": { ..., "psr-4": { ..., "Jcc\Taxi\": "packages/jcc/taxi/src/" } }, ... }
И выполните команду:
composer dump-autoload
Последний раз в web.php
Для изменения:
Route::get('/', function () { app('taxi')->printRunning(); });
В этот момент, когда мы посетим домашнюю страницу проекта laravel, на ней будет отображаться запущено
Поздравляем вас с успехом.
Разработать пакет несложно. Это нелегко сказать. Самое главное, что вам нужно постоянное творчество.