internachi/modular
A lightweight module system for Laravel using Composer path repositories and Laravel package discovery. Organize large apps by placing self-contained “modules” in an app-modules/ directory, following standard Laravel package conventions with minimal extra tooling.
Installation
composer require internachi/modular
Publish Config (Optional but Recommended)
php artisan vendor:publish --tag=modular-config
InterNACHI instead of Modules\).Create Your First Module
php artisan make:module users
app-modules/users/ with standard Laravel conventions.Update Composer
composer update modules/users
Sync Project Configs (Optional)
php artisan modules:sync
phpunit.xml and PhpStorm configs to recognize modules.php artisan make:model User --module=users
app-modules/users/src/Models/User.php.Generate a Controller in a Module
php artisan make:controller UserController --module=users
app-modules/users/src/Http/Controllers/UserController.php.Run Module-Specific Seeders
php artisan db:seed --module=users
app-modules/users/src/Database/Seeders/DatabaseSeeder.Cache/Clear Module Discovery
php artisan modules:cache # Optimize auto-discovery
php artisan modules:clear # Reset cache
Auto-Discovery:
app-modules/{module}/src/Console/Kernel.php.php artisan migrate (no extra steps).factory(Modules\Users\Models\User::class).<x-users::profile />).__('users::messages.welcome').Example: Blade Component Place a component at:
app-modules/users/src/View/Components/Profile.php
Use in Blade:
<x-users::profile user="{{ $user }}" />
php artisan make:module payments
php artisan make:model Payment --module=payments
php artisan make:migration create_payments_table --module=payments
app-modules/payments/routes/web.php:
Route::prefix('payments')->group(function () {
Route::get('/', 'PaymentController@index');
});
composer config repositories.my-modules path ./app-modules
composer require my-modules/payments
composer.json.Publish the app-modules.php config:
php artisan vendor:publish --tag=modular-stubs
Modify stubs to change:
src/ → app/).Modules\ → App\Modules\).Example stub placeholder:
// app-modules.php
'stubs' => [
'module' => [
'path' => __DIR__.'/stubs/module',
'namespace' => 'App\\Modules',
],
],
Namespace Collisions
Auth, Cache).InterNACHI\Auth).Composer Path Repository Issues
composer update fails, ensure app-modules/ exists and is writable.composer.json:
"repositories": {
"my-modules": { "type": "path", "url": "./app-modules" }
}
PhpStorm Not Recognizing Modules
php artisan modules:sync to update IDE configs.app-modules/ to PhpStorm’s "Project Root" settings.Blade Component Auto-Discovery Fails
src/View/Components/ or resources/components/.<x-users::profile />).Migration Path Issues on Windows
/) in paths or enable composer.config.json:
{
"config": {
"platform-check": false
}
}
Check Loaded Modules
php artisan modules:list
Clear Caches
php artisan modules:clear
php artisan config:clear
php artisan view:clear
Verify Auto-Discovery
vendor/internachi/modular/src/ModuleServiceProvider.php for registered tags.config/app.php includes:
'providers' => [
Internachi\Modular\ModuleServiceProvider::class,
],
Debug Composer Paths
composer show -a to verify module repositories are registered.Custom Module Stubs
php artisan vendor:publish --tag=modular-stubs
config/stubs/module/.Add Module-Specific Service Providers
app-modules/{module}/src/Providers/AppServiceProvider.php:
public function register()
{
$this->app->register(\Modules\Users\Providers\AuthServiceProvider::class);
}
Dynamic Module Loading
Modules facade to check if a module is loaded:
if (\Internachi\Modular\Facades\Modules::has('users')) {
// Module is active
}
Post-Install Hooks
composer.json to auto-run modules:sync:
"scripts": {
"post-autoload-dump": [
"@php artisan modules:sync"
]
}
Use --module for All make: Commands
php artisan make:policy UserPolicy --module=users
Leverage Module-Specific Routes
app-modules/{module}/routes/web.php:
Route::prefix('admin/users')->group(function () {
// Module-specific routes
});
Isolate Dependencies
app-modules/{module}/composer.json:
{
"require": {
"spatie/laravel-permission": "^5.0"
}
}
composer update in the module directory.Test Modules in Isolation
--module flag with phpunit:
php artisan test --module=users
Modules\Users\Tests).How can I help you explore Laravel packages today?