Нововведения и правки «Композер-инсталлера»

Недавно поработал над «Композер-инсталлером»: исправил ошибку в «битриксовом» установщике и добавил доступ к консоли. Что характерно, последняя доработка потребовалась для первой.

Доступ к консоли

В Composer\Installers\BaseInstaller добавлено свойство $io, реализация IOInterface. Отныне можно в консоль выводить уведомления, сообщения об ошибках и даже реагировать на действия пользователя. Парочка примеров:

class BitrixInstaller extends BaseInstaller
{
     protected function templatePath($path, array $vars = array())
     {
          $this->io->writeError('<error>Не хочу устанавливаться!</error>');

          while (true) {
                switch ($this->io->ask('<info>Нажми на клаву [y,n,?]</info> ', '?')) {
                    case 'y':
                        // Пользователь ввёл «y»
                        break 2;

                    case 'n':
                        // Пользователь ввёл «n»
                        break 2;

                    case '?':
                    default:
                        // Пользователь ввёл фиг знает что
                        break;
                }
     }
}

Исправления «битриксового» установщика

Для «Композера» существует установщик «битриксовых» пакетов, который умеет размещать в нужные каталоги сайта модули, компоненты и шаблоны. В первой версии установщика «косяк», нарушающий идеологию «Композера»: пакеты размещались в каталоге local/. Почему это неправильно — расскажу чуть ниже.

Пару дней назад я исправил это, добавив ко всему поиск пакетов-дубликатов в local/. «Композер» любезно сообщит и предложит удалить пакеты из старых путей:

И зачем?..

Вообще-то, на сайте «Композера» об этом написано, но всё равно довольно часто слышу и читаю подобные вопросы. Идеология менеджера пакетов такова, что устанавливаемые библиотеки не должны находится под версионным контролем проекта («Гит», «Меркуриал» и пр.), менеджер сам будет управлять ими и отслеживать их изменение. В проекте должны версионироваться только конфигурационные файлы, в случае «Композера» — это composer.json и composer.lock.

С внедрением в «Битрикс» поддержки отдельной директории local/ для собственных разработок, каталог bitrix/ стал аналогом каталога vendor/. bitrix/ должен использоваться для системных файлов и сторонних модулей, пакетов, тем и пр. Чаще всего, он размещается в .vcsignore проекта.

Поделиться
Отправить
Запинить
Популярное