четверг, 19 января 2017 г.

Использование расширений в обход композера

Иногда необходимо подключить расширение Yii2 в обход Composer.

Например, в каком-то расширении обнаружился досадный баг. Сообщили разработчикам, ждём исправления... Но что делать с нашим приложением, пока баг не исправлен?

Можно исправить код прямо в папке "vendor". Но этого делать не стоит - в первую очередь потому, что править придётся на каждой машине, где установлено приложение, включая продакшн. И при любом обновлении файлы затрутся.

Выход - подключить расширение в обход стандартного механизма Composer. Это делается легко.

1. Удаляем расширение из зависимостей Composer.
composer remove coolvendor/coolextension

2. Качаем нужную версию расширения из репозитория в виде архива, распаковываем в какую-нибудь папку проекта. Например, "common/external/coolvendor/coolextension-1.0.0".

3. Указываем алиас в соответствии с именем расширения.
return [
    ...
    'aliases' => [
        '@coolvendor/coolextension' => '@common/external/coolvendor/coolextension-1.0.0',
        ...
    ]
];

Готово!

Можем пользоваться расширением, с тем же удобством, как если оно было подключено через Composer.

Когда необходимость в отдельном подключении отпадёт - например, разработчики исправили мешающий баг - можно легко и быстро вернуть расширение на своё место. Удаляем папку расширения, удаляем алиас, подключаем расширение через Composer.

2 комментария:

  1. Хочется немного дополнить: иногда расширение также подключает bootstrap-класс, в таком случае, при описанном подходе, его тоже надо отдельно указать в bootstrap-секции конфига. И еще надо иметь в виду, что такая информация как версия расширения (\Yii::$app->extensions['...имя расширения...']['version']) не будет доступна, если вдруг она используется где-то в коде приложения. И спасибо, что делитесь опытом) Полезно, сэкономит время в будущем.

    ОтветитьУдалить