UNPKG

@soybean-react/vite-plugin-react-router

Version:

A plugin to create router elegantly

136 lines (102 loc) 7.02 kB
# ElegantRouter 优雅路由 中文 | [English](./README.md) ## 介绍 下面是一份示例文档,可帮助你介绍一个“类似 Next.js 的基于文件的路由插件”(无需 Node 依赖,采用约定式文件结构),并将链接指向 [react-docs.soybeanjs.cn/routes](https://react-docs.soybeanjs.cn/routes) 以获取更多信息。你可以在 README 或官方文档中放置这篇内容,帮助开发者了解、安装并使用该插件。 --- # 类似 Next.js 的文件式路由插件 > **文档地址**: [https://react-docs.soybeanjs.cn/routes](https://react-docs.soybeanjs.cn/routes) > 如果你想了解更多技术细节或内部实现原理,欢迎点击上方链接前往查看。 ## 为什么需要这个插件? - **无需 Node,纯前端静态部署可用** 不同于 Next.js 那样依赖 Node 服务器做 SSR(Server-Side Rendering)或 SSG(Static Site Generation),本插件的目标是在**任何静态环境**下就能跑。你只需要一个普通的前端构建流程(Vite、Webpack 等),再将产物部署到任意 HTTP 服务器或 CDN 即可。 - **约定式路由,目录即页面** 参考 Next.js 等优秀的文件式路由理念,无需维护额外路由配置文件。只要遵循简单的“`pages` 目录结构”规则,每个目录或 `.tsx` 文件就能映射成一个路由页面,省去了手写路由表的麻烦。 - **贴合国内前端的项目习惯** 在国内,许多团队已经习惯了“在 `src/pages``pages` 目录里直接写页面”。这个插件与 React Router 深度结合,使用方式**简单直观**,让你几乎不用改变平时的开发习惯。 - **与 React Router 生态兼容** 插件底层基于 [React Router](https://reactrouter.com/),保留了其核心特性和常用 API。如果你想在某些特殊场景下自定义路由行为,依然可以随时跳回 React Router 的写法,**灵活度更高**## 功能特性 1. **自动扫描文件生成路由** 无需手工配置 `path``Component` 等,插件会扫描 `pages` 目录结构并自动生成对应的路由层级。 2. **支持动态路由 / 动态参数** 通过类似 `[id].tsx``[...slug].tsx` 这样的命名方式,你可以轻松实现**动态路径**;在页面组件中,用 React Router 的 `useParams()` 或插件提供的工具解析 URL 参数。 3. **多级嵌套路由** 假如你的文件结构是: ``` pages/ user/ profile.tsx settings.tsx ``` 插件会自动生成多级路由,让用户访问 `/user/profile``/user/settings` 时,分别渲染对应组件。不需手动添加 `<Route>`4. **灵活的路由 Hook** 若你需要更多自定义逻辑(如守卫、权限校验、数据预加载等),可直接利用 React Router 原生的 `useLocation``useNavigate``Outlet` 等 API,或在配置文件中添加自定义规则。 5. **与前端工具链无缝衔接** - 兼容常见打包工具 (Vite、Webpack、Parcel 等); - 不限于特定框架结构,无论是 `create-react-app` 还是自定义的脚手架,都能轻松集成。 ## 如何安装使用 > **更多详细使用说明,请访问 [官方文档](https://react-docs.soybeanjs.cn/routes)。** 1. **安装依赖** ```bash # 以 npm 为例 npm install --save-dev @soybean-react/vite-plugin-react-router # 或者使用 yarn/pnpm 等包管理工具 yarn add --dev @soybean-react/vite-plugin-react-router ``` 2. **在项目配置中启用** - 如果使用 Vite,可在 `vite.config.ts` 中引入并配置插件; - 对于 Webpack,也可以通过自定义的 Plugin/HMR 方案来接入。 下面以 Vite 为示例: ```ts // vite.config.ts import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import FileBasedRouter from '@soybean-react/vite-plugin-react-router'; export default defineConfig({ plugins: [ react(), FileBasedRouter({ // 可选配置项,例如 pages 目录路径等 pagesDir: 'src/pages', // 其他自定义选项…… }) ], }); ``` 3. **创建 `pages` 目录** 在项目根目录或 `src/` 下面创建一个 `pages` 文件夹,比如: ``` src/ pages/ index.tsx about.tsx user/ index.tsx [id].tsx ``` - `index.tsx` 对应 `/` 路径 - `about.tsx` 对应 `/about` - `user/index.tsx` 对应 `/user` - `user/[id].tsx` 对应 `/user/:id` (动态路由) 4. **运行项目** 启动本地开发服务器,访问相应 URL,看是否能正常加载对应的页面组件。 ## 常见问题 1. **与官方文件式路由有何区别?** React Router 官方也提供了[基于文件夹的路由插件](https://reactrouter.com/en/main/routers/picking-a-router),功能非常强大。 - 但是在有些场景,项目不希望或无法迁移到 Node SSR 环境,希望保留“纯前端”的方式; - 或者对“目录即路由”的映射规则有定制需求; - 或需要极简的打包输出及部署流程。 这时,本插件能提供更直接、贴合国内开发习惯的选项,**与官方方案不冲突**,二者可根据实际需求选择。 2. **是否支持嵌套布局或 Layout?** - 可以在 `pages/` 中通过文件夹结构或自定义 `layout.tsx` 等文件的方式,结合 React Router 提供的 `<Outlet>`,轻松实现多级嵌套布局。 - 详情参阅 [文档示例](https://react-docs.soybeanjs.cn/routes) 中的“嵌套布局”章节。 3. **打包后如何部署?** - 打包后会生成纯前端产物,直接丢到任何静态服务器或 CDN 都可使用;无需 Node、Nginx 做特殊配置(除非你想自定义路由回退或 404 页面)。 - 如果要配合后端路由,需要确保后端能在刷新时正确返回前端入口文件(常见做法是做一个 `/*` 通配路由指向 `index.html`)。 4. **能与 SSR、SSG 结合吗?** - 默认是纯前端 SPA,不处理服务端渲染。如果你需要 SSR,可以考虑 Next.js 或 Remix。但本插件更多是为“不需要 SSR 的静态项目”服务。 ## 更多资料 - **[详细使用文档](https://react-docs.soybeanjs.cn/routes)**(强烈推荐):包含路由生成原理、动态参数配置、嵌套布局示例、常见问题等。 - 欢迎在 GitHub 仓库提交 [Issue/PR]:若你在使用过程中遇到问题或有需求扩展,可以随时与我们沟通。 --- 通过这个**类似 Next.js 文件式路由**插件,你可以**用最少的配置**,快速在 React 项目里享受“目录即页面”带来的便利;同时还能保留对 React Router 特性的兼容,部署则只需静态服务即可。更多细节和进阶指南,敬请访问 [文档](https://react-docs.soybeanjs.cn/routes),希望它能为你的前端开发带来一点新的思路与灵感。