# 使用vite-plugin-pages生成约定式路由

https://github.com/hannoeru/vite-plugin-pages

// vite.config.ts
import Pages from 'vite-plugin-pages'
export default defineConfig(({ mode }) => {
    return {
        plugins: [
            Pages({
                dirs: 'src/app/pages'
            }),
        ]
    }
})
1
2
3
4
5
6
7
8
9
10
11

router.ts

import addonRoutes from '~pages'
addonRoutes.forEach((route: RouteRecordRaw) => router.addRoute(route))
1
2

如果是React

import addonRoutes from '~react-pages'

const routes = [
    ...addonRoutes
]
const router = createBrowserRouter(routes, { basename: '/app' })
const Router = () => <RouterProvider router={router} />
1
2
3
4
5
6
7

声明类型

// vite-plugin-pages.d.ts
declare module '~react-pages' {
  import { RouteObject } from 'react-router-dom'
  const routes: RouteObject[]
  export default routes
} 
1
2
3
4
5
6

# 生成嵌套路由

目录结构如下图所示,其中left.tsx中需要有Outlet

具体可以看:https://github.com/hannoeru/vite-plugin-pages?tab=readme-ov-file#nested-routes

image-20250320104517624