1. composer config --no-plugins allow-plugins.wikimedia/composer-merge-plugin true (due to erro i run first step) composer require nwidart/laravel-modules php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider" --tag=config config/modules.php 'Modules', /* |-------------------------------------------------------------------------- | Module Stubs |-------------------------------------------------------------------------- */ 'stubs' => [ 'enabled' => false, 'path' => base_path('vendor/nwidart/laravel-modules/src/Commands/stubs'), 'files' => [ 'routes/web' => 'Routes/web.php', 'routes/api' => 'Routes/api.php', 'views/index' => 'Resources/views/index.blade.php', 'views/master' => 'Resources/views/layouts/master.blade.php', 'scaffold/config' => 'Config/config.php', 'composer' => 'composer.json', 'assets/js/app' => 'Resources/assets/js/app.js', 'assets/sass/app' => 'Resources/assets/sass/app.scss', 'vite' => 'vite.config.js', 'package' => 'package.json', ], 'replacements' => [ 'routes/web' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE', 'CONTROLLER_NAMESPACE'], 'routes/api' => ['LOWER_NAME', 'STUDLY_NAME'], 'vite' => ['LOWER_NAME'], 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE', 'PROVIDER_NAMESPACE'], 'views/index' => ['LOWER_NAME'], 'views/master' => ['LOWER_NAME', 'STUDLY_NAME'], 'scaffold/config' => ['STUDLY_NAME'], 'composer' => ['LOWER_NAME','STUDLY_NAME','VENDOR','AUTHOR_NAME','AUTHOR_EMAIL','MODULE_NAMESPACE','PROVIDER_NAMESPACE'], ], 'gitkeep' => true, ], 'paths' => [ /* |-------------------------------------------------------------------------- | Modules & Assets paths |-------------------------------------------------------------------------- */ 'modules' => base_path('Modules'), 'assets' => public_path('modules'), /* |-------------------------------------------------------------------------- | Shared migrations publish path |-------------------------------------------------------------------------- */ 'migration' => database_path('migrations'), /* |-------------------------------------------------------------------------- | Classic layout selector |-------------------------------------------------------------------------- | Empty string = no App/ folder inside modules (classic structure) */ 'app_folder' => '', /* |-------------------------------------------------------------------------- | Generators (classic layout) |-------------------------------------------------------------------------- */ 'generator' => [ 'config' => ['path' => 'Config', 'generate' => true], 'command' => ['path' => 'Console', 'generate' => true], 'channels' => ['path' => 'Broadcasting', 'generate' => false], 'migration' => ['path' => 'Database/Migrations', 'generate' => true], 'seeder' => ['path' => 'Database/Seeders', 'generate' => true], 'factory' => ['path' => 'Database/Factories', 'generate' => true], 'model' => ['path' => 'Entities', 'generate' => true], 'observer' => ['path' => 'Observers', 'generate' => false], 'routes' => ['path' => 'Routes', 'generate' => true], 'controller' => ['path' => 'Http/Controllers', 'generate' => true], 'filter' => ['path' => 'Http/Middleware', 'generate' => false], // keep key name 'filter' for backward compat 'request' => ['path' => 'Http/Requests', 'generate' => true], 'provider' => ['path' => 'Providers', 'generate' => true], 'assets' => ['path' => 'Resources/assets', 'generate' => true], 'lang' => ['path' => 'Resources/lang', 'generate' => true], 'views' => ['path' => 'Resources/views', 'generate' => true], 'test' => ['path' => 'Tests/Unit', 'generate' => true], 'test-feature' => ['path' => 'Tests/Feature', 'generate' => true], 'repository' => ['path' => 'Repositories', 'generate' => false], 'event' => ['path' => 'Events', 'generate' => false], 'listener' => ['path' => 'Listeners', 'generate' => false], 'policies' => ['path' => 'Policies', 'generate' => false], 'rules' => ['path' => 'Rules', 'generate' => false], 'jobs' => ['path' => 'Jobs', 'generate' => false], 'emails' => ['path' => 'Emails', 'generate' => false], 'notifications' => ['path' => 'Notifications', 'generate' => false], 'resource' => ['path' => 'Resources', 'generate' => false], 'component-view' => ['path' => 'Resources/views/components', 'generate' => false], 'component-class'=> ['path' => 'View/Components', 'generate' => false], ], ], /* |-------------------------------------------------------------------------- | Package commands |-------------------------------------------------------------------------- */ 'commands' => ConsoleServiceProvider::defaultCommands() ->merge([ // add custom commands here if needed ])->toArray(), /* |-------------------------------------------------------------------------- | Scan vendor for modules (usually off) |-------------------------------------------------------------------------- */ 'scan' => [ 'enabled' => false, 'paths' => [ base_path('vendor/*/*'), ], ], /* |-------------------------------------------------------------------------- | composer.json template defaults for new modules |-------------------------------------------------------------------------- */ 'composer' => [ 'vendor' => 'nwidart', 'author' => [ 'name' => 'Nicolas Widart', 'email' => 'n.widart@gmail.com', ], 'composer-output' => false, ], /* |-------------------------------------------------------------------------- | Cache |-------------------------------------------------------------------------- */ 'cache' => [ 'enabled' => false, 'driver' => 'file', 'key' => 'laravel-modules', 'lifetime' => 60, ], /* |-------------------------------------------------------------------------- | What the package should auto-register |-------------------------------------------------------------------------- */ 'register' => [ 'translations' => true, 'files' => 'register', // 'boot' to load in boot() ], /* |-------------------------------------------------------------------------- | Activators |-------------------------------------------------------------------------- */ 'activators' => [ 'file' => [ 'class' => FileActivator::class, 'statuses-file' => base_path('modules_statuses.json'), 'cache-key' => 'activator.installed', 'cache-lifetime'=> 604800, ], ], 'activator' => 'file', ];