0.2.6 • Published 2 years ago
vite-plugin-lazy-pages v0.2.6
vite-plugin-lazy-pages
Simple file-based routing for Vite. Currently only React Router is supported, and only dynamic page import is supported. Static import is not envisioned or planned.
Features
- Only data routers support
- Lazy loading routes by
lazyproperty - Support data
loaders,actionsanderror-boundary - Ignored routes per directory
- Typescript support
Getting started
Install:
npm install -D vite-plugin-lazy-pages
npm install react-router react-router-dom Integrate:
// vite.config.js
import lazyPages from 'vite-plugin-lazy-pages'
export default {
plugins: [
lazyPages(),
],
}// main.js
import React from 'react'
import ReactDOM from 'react-dom/client'
import { RouterProvider, createBrowserRouter } from 'react-router-dom';
import routes from 'virtual:lazy-pages'
const router = createBrowserRouter(routes)
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<RouterProvider fallbackElement="router loading..." router={router} />
</React.StrictMode>,
)Configuration
Pass your options to lazyPages function for customize:
// vite.config.js
import lazyPages from 'vite-plugin-lazy-pages'
export default {
plugins: [
lazyPages({
pages: [ { dir: 'src/pages', filePattern: /^.*\.(js|jsx|ts|tsx)$/ } ],
exportMode: 'default',
exclude [ 'src/pages/dev' ],
extendRoute (route) => {
route.handle.auth = true;
return route;
}
}),
],
}pages
- Type:
{ dir: string; filePattern: RegExp; }[] - Default:
[ { dir: 'src/pages', filePattern: /^.*\.(js|jsx|ts|tsx)$/ } ]
Example structure:
src/
└── pages/
├── index.{jsx|tsx}
├── about.{jsx|tsx}
├── products/
│ ├── index.{jsx|tsx}
│ └── [id].{jsx|tsx}
└── names/
├── index.{jsx|tsx}
└── [name]
├── index.{jsx|tsx}
└── info.{jsx|tsx}exportMode
- Type:
'default' | 'named' - Default:
'default'
Which component export you are using. default is the default export of the component. named - remix-like component export
exclude
- Type:
string[] - Default:
[]
At this time, only directory exclusion is supported
extendRoute
- Type:
(route: RouteObject) => (RouteObject | Promise<RouteObject>) - Default:
undefined
You can extend the route with this function. You can see an example above. Also the route is already an extended route. route.handle is an object and contains a pattern field.