UNPKG

@moccona/vite-plugin-react-conventional-router

Version:

Vite plugin for react conventional router

128 lines (91 loc) 2.97 kB
# @moccona/vite-plugin-react-conventional-router > 这个库只基于 _react-router_ 实现,与 _react-router_ 的功能高度集成。其他的路由库暂时不支持,比如 _@tanstack/react-router_ ## 安装与配置 - 先安装 _react-router_ 和 _react-router-dom_ ```sh npm i react-router react-router-dom ``` - 安装插件 ```sh npm i @moccona/vite-plugin-react-conventional-router -D ``` - 配置插件 ```ts // vite.config.ts import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import conventionalRouter from "@moccona/vite-plugin-react-conventional-router" // https://vitejs.dev/config/ export default defineConfig({ plugins: [ react(), conventionalRouter({ // 需要解析为路由的文件 include: ["src/pages/**"], // 需要被排除解析的文件 exclude: ["src/**/components/**","src/**/hooks/**"] }), ], }) // ``` - 添加虚拟路由模块类型定义文件到 _tsconfig.json_ , 避免导入路有配置的时候报 _MODULE NOT FOUND_ 的错误。 ```ts { //... "include": [ "src", "./node_modules/@moccona/vite-plugin-react-conventional-router/client.d.ts" ] } ``` - 从虚拟路由模块中导入生成的路由数据,然后创建路由 ```tsx import routes from "virtual:routes" import { createBrowserRouter, RouterProvider } from "react-router-dom"; export default function App() { return <div id="main"> <RouterProvider router={createBrowserRouter(routes)} fallbackElement={ <div> Loading </div> } /> </div> } ``` ## 文件名与路由的映射关系 ```txt `src/pages/index.tsx` -> `/` `src/pages/home.tsx` -> `/home` `src/pages/home.list.tsx` -> `/home/list` `src/pages/home.@id.tsx` -> `/home/:id` `src/pages/home.list.$id.tsx` -> `/home/list/:id?` `src/pages/blog/_.tsx` -> `/home/blog/*` ``` ### Layout 两种布局组件格式。 - \*\*/layout.tsx 作为同级目录下的布局组件。 - \*\*/pageName.layout.tsx 作为page路由的布局组件。 ### ErrorBoundary 两种错误边界组件格式。 - \*\*/errorBoundary.tsx 作为同级目录下的错误边界组件。 - \*\*/page.errorBoundary.tsx 作为page路由的错误边界组件。 ## 如何组织路由文件内容 文件内容组织参考 _react-router_ 的 [**lazy**](https://reactrouter.com/en/main/route/lazy#lazy) 部分。唯一不同的是,默认到处会作为 _Component_ 被使用。 ## 环境变量 插件支持从环境变量中读取 _browser router_ 的配置。 - BASE_NAME 用程序的basename,用于不能部署到域的根目录,而是一个子目录的情况。 ## Todos - [x] "virtual:routes" module for routes export. - [x] Support dynamic route. - [x] Support optional route. - [x] Split loader/action into individual file. - [x] Support reading router configuration from .env file. - [x] Migrate react-router from v6 to v7.