0.2.6 • Published 6 months ago

@moccona/vite-plugin-react-conventional-router v0.2.6

Weekly downloads
-
License
MIT
Repository
-
Last release
6 months ago

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

这个库只基于 react-router 实现,与 react-router 的功能高度集成。其他的路由库暂时不支持,比如 @tanstack/react-router

安装与配置

  • 先安装 react-routerreact-router-dom
npm i react-router react-router-dom
  • 安装插件
npm i @moccona/vite-plugin-react-conventional-router -D
  • 配置插件
// 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 的错误。
{
  //...
  "include": [
    "src",
    "./node_modules/@moccona/vite-plugin-react-conventional-router/client.d.ts"
  ]
}
  • 从虚拟路由模块中导入生成的路由数据,然后创建路由
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>
}

文件名与路由的映射关系

`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-routerlazy 部分。唯一不同的是,默认到处会作为 Component 被使用。

环境变量

插件支持从环境变量中读取 browser router 的配置。

  • BASE_NAME 用程序的basename,用于不能部署到域的根目录,而是一个子目录的情况。

Todos

  • "virtual:routes" module for routes export.
  • Support dynamic route.
  • Support optional route.
  • Split loader/action into individual file.
  • Support reading router configuration from .env file.
  • Migrate react-router from v6 to v7.
0.2.6

6 months ago

0.2.5

7 months ago

0.2.4

7 months ago

0.2.3

7 months ago

0.2.2

8 months ago

0.2.1

8 months ago

0.1.2

11 months ago

0.1.1

11 months ago

0.1.0

1 year ago

0.0.2

1 year ago

0.0.0

1 year ago