vite-plugin-pages-router
v1.0.25
Published
file-router plugin for vite
Maintainers
Readme
vite-plugin-pages-router
vite-plugin-pages-router is a plugin that enables Next.js-style file-based routing for Vite and React projects.
It automatically scans .tsx page files in the src/pages directory and generates routing configurations via virtual modules.
The plugin also automatically imports and applies user-provided 404 page and loading component from the specified options.
Note:
This plugin does not physically create aRouterConfig.tsxfile on disk.
Instead, it leverages Vite's virtual module system to provide the<RouterConfig />React component internally,
allowing file-based routing without requiring separate router configuration files.
Installation
# npm install
npm install vite-plugin-pages-routerUsage
1. Configure Vite Config File
Import and register the plugin in your vite.config.ts file with desired options.
The plugin serves two roles:
- Vite Plugin:
- Import the plugin function from
vite-plugin-pages-router/plugin.
- Import the plugin function from
- React Router Configuration Component:
- Import the virtual module from the main package (
vite-plugin-pages-router) to use<RouterConfig />in your app.
- Import the virtual module from the main package (
// vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import createFileRouterPlugin from "vite-plugin-pages-router/plugin";
export default defineConfig({
plugins: [
react(),
createFileRouterPlugin({
pagesDir: "src/pages", // Directory containing page components
notFoundPage: "src/pages/404.tsx", // 404 error page component path
loadingComponent: "src/components/Loading.tsx", // Loading component path
}),
],
// Optional alias configuration (e.g., "src" path mapping)
resolve: {
alias: {
src: "/src",
},
},
});2. Create Page Components
Create page components inside the src/pages directory.
Examples for a home page and an about page:
Home Page Example (src/pages/index.tsx)
// src/pages/index.tsx
import React from "react";
function HomePage(): JSX.Element {
return (
<div className="p-4 text-center">
<h1 className="text-2xl font-bold">Home Page</h1>
<p>Welcome!</p>
</div>
);
}
export default HomePage;About Page Example (src/pages/about.tsx)
// src/pages/about.tsx
import React from "react";
function AboutPage(): JSX.Element {
return (
<div className="p-4 text-center">
<h1 className="text-2xl font-bold">About Page</h1>
<p>This is an example of file-based routing using the plugin.</p>
</div>
);
}
export default AboutPage;3. Create 404 Page and Loading Component
404 Page Example (src/pages/404.tsx)
// src/pages/404.tsx
import React from "react";
function NotFoundPage(): JSX.Element {
return (
<div className="p-4 text-center text-red-500">
<h1 className="text-2xl font-bold">404 - Page Not Found</h1>
<p>Sorry, the requested page does not exist.</p>
</div>
);
}
export default NotFoundPage;Loading Component Example (src/components/Loading.tsx)
// src/components/Loading.tsx
import React from "react";
function Loading(): JSX.Element {
return (
<div className="p-4 text-center">
<p className="text-lg">Loading...</p>
</div>
);
}
export default Loading;4. Use in App Component
Import the <RouterConfig /> component from the virtual module provided by the plugin in your app.
// src/App.tsx
import React from "react";
import RouterConfig from "vite-plugin-pages-router"; // Provided via virtual module
function App(): JSX.Element {
return (
<div className="min-h-screen bg-gray-50">
<RouterConfig />
</div>
);
}
export default App;5. Run the Project
Start the Vite dev server to verify functionality:
npm run devVisit http://localhost:5173 in your browser.
The file-based routing will render / (Home), /about (About), and other pages automatically.
Accessing an invalid route will display the 404 page, and page transitions will show the loading component.
How It Works
Automatic File Scanning: The plugin scans all
.tsxfiles insrc/pagesto generate route paths:index.tsx→/about.tsx→/about[id].tsx→/:id
Loading & 404 Handling:
- If
loadingComponentis provided, it is used as the<Suspense fallback={...}>.
Default:<div>Loading...</div>. - If
notFoundPageis provided, it is used for 404 routes.
Default:<div>404 Not Found</div>.
- If
Virtual Module: The plugin provides the
<RouterConfig />component via Vite's virtual module system.
This component includes<BrowserRouter>,<Suspense>,<Routes>, and 404 handling.
Routes automatically update when page files are added/removed.
By installing and configuring this plugin, you can implement file-based routing without manual router setup.
For questions or issues, visit GitHub Issues.
Tip: File-based routing mirrors your directory structure, automatically updating routes as you add/remove pages.
This significantly improves development efficiency.
