vite-plugin-pages: 文件式路由 file-based router
又一个文件式路由使用指南,适合做一些简单的 demo 项目
01 安装插件
安装 vite-plugin-pages 插件
yarn add --dev vite-plugin-pages02 vite 的配置
配置如下
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
import Pages from "vite-plugin-pages";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react(),
Pages({
// 排除 _ 开头的文件
exclude: ["**/**/_*"],
}),
],
});03 react 入口改造
文件 main.tsx
import { StrictMode, Suspense } from 'react'
import { createRoot } from 'react-dom/client'
import {
BrowserRouter,
useRoutes,
} from 'react-router-dom'
import routes from '~react-pages'
import './index.css'
// eslint-disable-next-line no-console
console.log(routes)
function App() {
return (
<Suspense fallback={<p>Loading...</p>}>
{useRoutes(routes)}
</Suspense>
)
}
const app = createRoot(document.getElementById('root')!)
app.render(
<StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</StrictMode>,
)04 typescript 支持
vite-env.d.ts 支持 ~pages
/// <reference types="vite-plugin-pages/client-react" />05 文件结构参考
示例 tree src 结果
.
├── favicon.svg
├── index.css
├── logo.svg
├── main.tsx
└── pages
├── [...all].tsx
├── __test__
│ └── index.tsx
├── about
│ └── index.tsx
├── about.tsx
├── blog
│ ├── [...all].tsx
│ ├── [id].tsx
│ ├── index.tsx
│ └── today
│ ├── [...all].tsx
│ └── index.tsx
├── components.tsx
├── index.tsx
└── posts
├── [...all].tsx
├── [id]
│ ├── edit.tsx
│ └── index.tsx
├── add.tsx
└── index.tsx
8 directories, 20 files