Overloaded

Improve you Magento1 module development process

January 13, 2016

Немного истории

На заре разработки magento модулей в нашей команде в тот момент когда мы начали использовать composer для установки magento модулей в проекты, появилась задача хранить код модуля при разработке отдельно от ядра magento. Дело в том что magento 1.x обладает довольно сложной структурой и заставляет мешать ваши собственные файлы расширений с тысячами файлов и директорий ядра magento. Некоторое время использовали для решения этой задачи - composer, хотя он нужен несколько для других вещей.

asciicast

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

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

Опыт использования

  • Заходим в директорий с magento сайтом и делаем modman init, создается служебная директорий в которую в последствии будут устанавливаться модули .modman (по аналогии с composer - там vendor)
  • Обязательно нужно разрешить использование симлинков в админке System > Configuration > Advanced > Developer
  • Один из вариантов делаем modman link path/to/module (есть ещё modman clone url - указывается путь до репозитория)
  • Чтобы можно было сделать modman link или modman clone модуль должен содержать файл маппинга. Маппинг указывается для каждого файла модуля - по принципу source -> destination.

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

Теперь самое интересное - как же автоматизировать все рутинные операции? Тут нам помогут n98-magerun и generate-modman.

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

n98-magerun dev:module:create --add-all --modman --add-composer --author-name="Autor Name" --author-email="@gmail.com" CustomNamespace CustomModule local

Командой будет создан скелетон модуля CustomModule с стандартной структурой magento-модуля, предподготовленным файлом конфигурации composer.json, c неймспейсом CustomNamespace в 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 наступающий Старым Новым Годом! :)


Dmitry Schegolihin

Dmitry Schegolihin writes about his front-end experience for platforms Magento2, Vue Storefront and performance optimizations. I help businesses earn more by developing and optimizing web apps.