nwidart/laravel-modules
Modularize large Laravel apps with nwidart/laravel-modules. Create self-contained modules (controllers, models, views, routes, config) with Artisan generators, module discovery, enabling/disabling, and per-module resources—tested and maintained across modern Laravel versions.
AuthModule, BillingModule).spatie/laravel-package-tools). Requires explicit module registration order.module_name_* prefixes).module:make, module:publish, module:seed, etc.merge-plugin is configured).| Risk Area | Severity | Mitigation |
|---|---|---|
| Module Isolation | High | Use database prefixes, separate service providers, and namespace guards. |
| Asset Compilation | Medium | Configure Vite/Laravel Mix per module to avoid global conflicts. |
| Dependency Management | Medium | Document module interdependencies (e.g., AuthModule required for BillingModule). |
| Performance | Low | Enable module caching (config['modules']['cache_enabled'] = true). |
| Upgrade Path | Medium | Test major version upgrades (e.g., v10→v11) in a staging environment. |
| Debugging Complexity | High | Implement module-specific logging (e.g., Module::getName() in logs). |
vite.config.js per module).| Phase | Steps | Tools/Commands |
|---|---|---|
| Evaluation | Audit existing codebase for high-cohesion, low-coupling components. | Manual review + php artisan module:discover |
| Scaffolding | Set up module structure (modules/ directory, composer.json merge-plugin). |
composer require nwidart/laravel-modules |
| Incremental Migration | Convert one feature/module at a time (e.g., Auth, Reports). |
php artisan module:make Auth |
| Dependency Mapping | Document module dependencies (e.g., Billing → Auth). |
Manual + module:list |
| Asset Isolation | Configure Vite/Laravel Mix per module (e.g., resources/js/modules/Auth.js). |
vite.config.js per module |
| Database Schema | Use module-specific migrations (e.g., module_name_users table). |
php artisan module:migrate Auth |
| Testing | Write module-specific tests (Pest/PHPUnit) and integration tests for cross-module flows. | php artisan module:test Auth |
| Deployment | Deploy modules independently (e.g., via Docker, zero-downtime updates). | CI/CD pipelines |
| Monitoring | Add module-specific logging (e.g., Module::getName() in logs). |
Laravel Log + ELK/Stackdriver |
laravel/breeze, spatie/laravel-permission) if modules include them.boot() or service providers (e.g., spatie/laravel-package-tools). Solution: Explicitly register in module’s ModuleServiceProvider.Auth::user() → app(AuthManager::class)->user()) if modules are isolated.AuthHelper in AuthModule).AuthModule/Http/Controllers/AuthController).AuthServiceInterface).modules/ dir, composer.json merge-plugin).composer require nwidart/laravel-modules.php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider".php artisan module:make Auth --controller --migration.php artisan module:disable Auth (verify no Auth routes/helpers work).vite.config.js in AuthModule).npm run dev --filter=AuthModule.php artisan module:migrate Auth.php artisan module:seed Auth.tests/Module/AuthModuleTest).How can I help you explore Laravel packages today?