Composer + Modman + n98magerun

Немного истории. На заре разработки Magento-модулей в нашей команде, в тот момент, когда мы начали использовать composer для установки Magento-модулей в проекты, появилась задача хранить код модуля при разработке отдельно от ядра Magento. Дело в том, что Magento 1.x обладает довольно сложной структурой и заставляет мешать ваши собственные файлы расширений с тысячами файлов и директорий ядра Magento. Некоторое время использовали для решения этой задачи composer, хотя он нужен несколько для других вещей. Спрашивал у коллег-бэкендеров, как они решают эту задачу — ответили: «По старинке, обычным копированием в проект». Нет, это не наш путь искать при выносе в композер все соответствующие файлы; а если файл инициализации модуля забыт? Чем же пользуются сертифицированные Magento программисты при разработке модулей?

Задача: сгенерировать скелетон модуля и оформить его в виде композер модуля и чтобы эти действия не занимали много времени.

Как мы делали до того, как узнали про modman. Была идея установки модуля и симлинков через композер - это долго и впоследствии отказались от этого, composer update происходит слишком долго. Нужен инструмент, прокидывающий симлинки рядом с директориями Magento ядра на основе некоторого маппинга. Был найден modman, опробован и внедрен.

Что же такое modman? Подробнее можно ознакомиться по ссылке https://github.com/colinmollenhour/modman

Modman позволяет сохранять файлы ваших Magento-модулей отдельно от тысяч файлов ядра Magento. При этом можно держать файлы модуля в отдельном репозитории системы контроля версий, это сопутствующая фича.

Начало работы:

  1. Заходим в директорию с Magento-сайтом и делаем modman init, создается служебная директория, в которую впоследствии будут устанавливаться модули .modman (по аналогии с composer — там vendor).
  2. Обязательно нужно разрешить использование симлинков в админке System > Configuration > Advanced > Developer.
  3. Один из вариантов: делаем modman link path_to_module_folder (есть ещё modman clone repo_url — указывается путь до репозитория).
  4. Чтобы можно было сделать modman link или modman clone, модуль должен содержать файл маппинга. Маппинг указывается для каждого файла модуля - по принципу source -> destination.

Один из плюсов — полная интеграция modman и composer. Композер умеет читать маппинг модман-файла, то есть маппинг находится в одном файле и можно использовать две технологии одновременно.

Теперь самое интересное — как же автоматизировать все рутинные операции? Тут к нам на помощь приходят две тулы: n98magerun и generate-modman. По поводу n98magerun написано очень много статей разного плана. Прикрепляю ссылки на тулы:

https://github.com/netz98/n98-magerun

https://github.com/mhauri/generate-modman

Как n98magerun и generate-modman можно использовать применительно к modman? В n98magerun есть генератор модуля, но тут необходимо добавить магические ключи:


n98-magerun dev:module:create --add-all --modman --add-composer --author-name="Komplizirte Technologien" --author-email="support@kt-team.de" Komplizierte Generated local

Командой будет создан скелетон модуля Generated с стандартной структурой Magento-модуля, предподготовленным файлом конфигурации composer.json, c неймспейсом Komplizierte в local code pull и соответствующим файлом маппинга modman. Ключи --author-name и --author-email добавят параметры в composer.json.

Структура каталогов получилась не совсем стандартной из-за директории src. Давайте её уберем: переносим содержимое src в текущую папку, удаляем src и вызываем генератор автоматического маппинга generate-modman. В итоге должна получиться структура:

Допустим, в процессе работы понадобилось замапить ещё одну директорию — не забываем перегенерить modman файл маппинга и починить все симлинки modman repair. Из документации:


repair       rebuild all modman-created symlinks (no updates performed)

Можно подать в консоли команду modman — выдаст документацию, в которой можно быстро найти нужный ключ.

Тулы предоставлены, задача решена. C наступающим Старым Новым Годом! ;-)