Laravel-Modules Когда ваш монолит хочет стать микросервисом (но не совсем)

13 Apr, 2026
6,162
🔱 1,018
👥 153

Знакомая ситуация? Начинаешь новый Laravel-проект, и он кажется таким легким и изящным. Но со временем, по мере добавления новых фич, контроллеры разрастаются, модели становятся гигантскими, а разобраться в структуре становится все сложнее. Проект превращается в тот самый "большой комок грязи", который так любят критиковать. В итоге, даже небольшие изменения требуют тщательной проверки, чтобы ничего не сломать в другом конце приложения.

Именно для таких случаев и был создан пакет nwidart/laravel-modules. Это не просто очередная библиотека, а полноценный фреймворк для управления модулями внутри вашего Laravel-приложения. Думайте о модулях как о мини-приложениях или, если хотите, о пакетах, которые живут внутри вашего основного проекта, но при этом обладают всей мощью Laravel.

Что это за зверь и кому он пригодится?

laravel-modules — это, по сути, инструмент для внедрения модульной архитектуры в ваш Laravel-проект. Вместо того чтобы складывать все контроллеры, модели, миграции и вьюхи в общие папки, вы разбиваете функциональность на логически независимые блоки — модули. Каждый модуль может содержать свои собственные контроллеры, модели, маршруты, вьюхи, миграции, консольные команды и даже тесты.

Кому это нужно? В первую очередь, разработчикам, работающим над:

  • Крупными корпоративными приложениями: где функциональность четко разделена (например, модули для HR, бухгалтерии, логистики).
  • SaaS-платформами: где каждый функциональный блок (управление пользователями, подписки, платежи, отчеты) может быть отдельным модулем.
  • E-commerce проектами: модули для каталога товаров, корзины, оформления заказа, управления складом.
  • Любыми проектами, которые склонны к разрастанию: если вы планируете долгосрочную поддержку и развитие, модульная структура значительно упростит жизнь.

Кстати, этот пакет — это переосмысленная и активно поддерживаемая версия популярного в прошлом pingpong/modules. Главный бонус нынешней версии, как отмечают сами авторы, — это наличие тестов, что добавляет уверенности в стабильности и надежности решения.

Реклама

Ключевые возможности, которые упростят жизнь

Давайте посмотрим, что конкретно предлагает laravel-modules и как это помогает в повседневной разработке.

1. Четкое разделение ответственности

Это, пожалуй, главная фишка. Вместо одной огромной папки app, у вас появляется папка Modules, а внутри нее — отдельные директории для каждого модуля: User, Product, Order и так далее. Каждый из них — это полноценная "коробка" со своей логикой.

app/
Modules/
  - User/
    - Config/
    - Database/
    - Http/
    - Providers/
    - Resources/
    - Routes/
    - ...
  - Product/
    - Config/
    - Database/
    - Http/
    - Providers/
    - Resources/
    - Routes/
    - ...
...

Такая структура делает код более читаемым, а навигацию по проекту — интуитивно понятной.

2. Удобное управление модулями через Artisan

Пакет предоставляет набор команд artisan для работы с модулями. Хотите создать новый модуль? Легко!

php artisan module:make Blog

Вам нужна миграция или контроллер внутри модуля Blog? Тоже не проблема:

php artisan module:make-migration create_posts_table Blog
php artisan module:make-controller PostController Blog

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

3. Полная интеграция с экосистемой Laravel

Модули не живут в изоляции. Они могут использовать все привычные возможности Laravel:

  • Маршрутизация: Каждый модуль может иметь свои собственные файлы маршрутов (web.php, api.php).
  • Вьюхи: Свои шаблоны, которые можно переопределять или расширять.
  • Миграции и сидеры: Управляйте схемами баз данных и тестовыми данными для каждого модуля отдельно.
  • Сервис-провайдеры: Регистрируйте сервисы, биндинги и слушатели событий прямо в модуле.
  • Конфигурация: Свои файлы конфигурации, которые можно публиковать и переопределять.

Это означает, что вы не теряете гибкости и мощи Laravel, а лишь упорядочиваете ее.

4. Легкость установки и автозагрузка

Установка пакета стандартна для Laravel-мира:

composer require nwidart/laravel-modules

После этого, чтобы ваши модули автоматически подгружались, нужно лишь добавить несколько строк в composer.json в секцию extra.merge-plugin:

"extra": {
    "laravel": {
        "dont-discover": []
    },
    "merge-plugin": {
        "include": [
            "Modules/*/composer.json"
        ]
    }
},

И, конечно, не забыть про composer dump-autoload. Это позволяет каждому модулю иметь свой собственный composer.json для управления зависимостями, что дает еще большую независимость.

Как это работает под капотом?

laravel-modules использует стандартные механизмы Laravel, чтобы "подключать" каждый модуль к основному приложению. По сути, каждый модуль рассматривается как отдельный пакет, который регистрирует свои сервис-провайдеры, маршруты и другие компоненты. Это достигается за счет умной работы с автозагрузкой Composer и собственным сервис-провайдером пакета, который сканирует директорию Modules и активирует найденные модули.

Интересно, что проект активно развивается и поддерживает актуальные версии Laravel, вплоть до Laravel 12. Это говорит о серьезном подходе команды к поддержке и развитию.

Практическое применение: от теории к делу

Представьте, что вы разрабатываете большую CRM-систему. Без laravel-modules у вас будет одна большая папка app с кучей контроллеров для пользователей, сделок, задач, отчетов и так далее. С laravel-modules вы можете создать:

  • Модуль Users для управления пользователями и их ролями.
  • Модуль Deals для работы со сделками и воронками продаж.
  • Модуль Tasks для постановки и отслеживания задач.
  • Модуль Reports для генерации различных отчетов.

Каждый из этих модулей будет жить в своей директории, иметь свои миграции, модели и контроллеры. Разработчик, работающий над функционалом задач, может сосредоточиться исключительно на модуле Tasks, не отвлекаясь на код сделок или пользователей. Это значительно снижает когнитивную нагрузку и ускоряет разработку.

Авторы пакета даже предлагают демо-приложение на базе Laravel Breeze, где можно увидеть, как модули Auth, Base и Profile работают вместе. Это отличный способ быстро понять концепцию на живом примере.

Стоит ли попробовать? Мой вердикт

Если вы столкнулись с проблемой разрастания вашего Laravel-приложения, или только планируете большой проект, который будет развиваться годами, nwidart/laravel-modules — это однозначно то, что стоит рассмотреть.

Кому особенно подойдет:

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

Этот пакет не превратит ваш монолит в полноценные микросервисы (для этого есть другие решения), но он даст вам мощный инструмент для организации кода внутри монолита таким образом, что он будет вести себя гораздо более предсказуемо и управляемо. Это отличный компромисс между простотой монолита и преимуществами модульной архитектуры.

Попробуйте, и вы, возможно, больше никогда не захотите возвращаться к "плоской" структуре больших Laravel-приложений! А если возникнут вопросы, у проекта есть активное Discord-сообщество, где всегда можно получить помощь.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.