@shardev/vite-plugin-modular
v1.2.7
Published
Advanced Laravel Modules support for Vite (monorepo + namespace resolver)
Downloads
58
Readme
@shardev/vite-plugin-modular
Vite plugin for modular Laravel applications.
This plugin allows you to:
- Discover Vite modules inside
packages/ - Automatically merge aliases and rollup inputs
- Enable per-module HMR
- Watch either
srcDirorpublishedDir - Respect module enable/disable via
modules.json - Keep modules fully isolated
Designed for large-scale Laravel + modular monorepo architectures.
Installation
npm install @shardev/vite-plugin-modular --save-devArchitecture Overview
The system is composed of two plugins:
laravelModule-- Used inside each module.laravelModules-- Used at the root Vite config to auto-discover modules.
Module Structure Example
packages/
└── shardevcom/
└── blog/
├── vite.config.ts
└── resources/
└── react/
└── src/
└── main.tsModule-Level Configuration
packages/shardevcom/blog/vite.config.ts
import { defineConfig } from 'vite'
import { laravelModule } from '@shardev/vite-plugin-modular'
export default defineConfig({
plugins: [
laravelModule({
name: 'blog',
mode: 'integrated',
srcDir: 'resources/react/src',
input: {
main: 'resources/react/src/main.ts'
},
buildDir: 'build/blog'
})
]
})Root Configuration
vite.config.ts
import { defineConfig } from 'vite'
import { laravelModules } from '@shardev/vite-plugin-modular'
export default defineConfig({
plugins: [
laravelModules({
modulesDir: 'packages',
statusesFile: 'modules.json',
debug: false,
useMetaCache: true
})
]
})Module Enable / Disable
Create a modules.json file:
{
"blog": true,
"shop": false
}If a module is set to false, it will not be loaded.
Watch Behavior
Each module registers a watcher based on:
usePublished && publishedDir ? publishedDir : srcDirThis allows:
- Developing directly from source
- Or watching compiled/published output
HMR Behavior
When a file changes inside a module:
- The module graph invalidates the affected module
- A manual HMR update is triggered
- Only the affected module is refreshed
This ensures isolation between modules.
Production Behavior
During vite build:
- All module inputs are merged
- Aliases are merged
- Rollup handles all entries
- Outputs remain isolated per module
License
MIT
