vite-plugin-pages 生成文件式路由

628 阅读1分钟

前言

vite-plugin-pages是一个能够快速根据文件系统生成路由的插件,在使用vite搭建项目时配置也非常简单。在熟悉了这种文件式路由后,在平时开发过程中也能够通过页面路由快速定位问题或者进行代码改动,可以说是非常方便了。

搭建Vite项目安装vite-plugin-pages

pnpm install -g vite
vite create my-react-app --template react-ts
pnpm install react-router-dom
pnpm install vite-plugin-pages

路由文件规则

默认路由索引: 以index命名的文件会默认为当前路由的索引页,而文件夹不会生成路由

image.png

  • src/pages/users/index.tsx
  • src/pages/users/index.tsx -> src/pages/users/id.tsx 同级路由

配置vite-plugin-pages

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import Pages from "vite-plugin-pages";
import {resolve} from 'path'
import type { ConfigEnv, UserConfig } from "vite";
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  return {
    envDir: "env",
    plugins: [
      react(),
      Pages({
        dirs: 'src/pages', // 自定义需要生成路由的文件目录,默认为src下的pages文件
        extensions: ["tsx"], // 生成路由的拓展名,如['tsx', 'jsx', 'ts', 'js']
        routeStyle: "next",
        exclude: ["**/components/**/*", "**/controller.tsx", "**/demo/**/*"], // 配置不生成路由的文件目录
        importMode: "async", // 页面组件的导入方式,可以是“同步”、“异步”或者函数,(filepath: string)
        // importMode(path) { // return path.includes('syx') ? 'async' : 'sync'  },
      }),
    ],
    resolve: {
      alias: [
        { find: /^~/, replacement: '' },
        { find: '@', replacement: resolve(__dirname, './src') }
      ]
    },
  };
});
// App挂载路由
import { Suspense } from "react";
import { RouterProvider, createBrowserRouter } from "react-router-dom";
import routes from "virtual:generated-pages-react";

function App() {
  const router = createBrowserRouter(routes);
  return (
      <Suspense>
        <RouterProvider router={router} />
      </Suspense>
  );
}

export default App;

配置一个404页面,在src/pages目录下新建一个[.all].tsx文件,当让访问路由失败时跳转到该页面 最后目录结构如下:

image.png

看看页面

image.png

image.png

image.png

image.png 一个基本的文件式路由就搭建起来了,更多配置可查看:vite-plugin-pages