详细了解 @feoe/fs-router 各个构建工具插件的配置选项。
所有构建工具插件都支持以下配置选项:
1interface PluginConfig {
2 /** 路由文件目录,默认 'src/routes' */
3 routesDirectory: string
4 /** 生成的路由文件路径,默认 'src/routes.tsx' */
5 generatedRoutesPath: string
6 /** 路由文件扩展名,默认 ['.js', '.jsx', '.ts', '.tsx'] */
7 routeExtensions?: string[]
8 /** 是否启用路由生成,默认 true */
9 enableGeneration?: boolean
10 /** 路径别名配置 */
11 alias?: {
12 name: string
13 basename: string
14 }
15 /** 是否启用代码分割,默认 true */
16 splitting?: boolean
17 /** 是否启用默认错误边界,默认 false */
18 defaultErrorBoundary?: boolean
19 /** 类型生成选项 */
20 typeGenerateOptions?: TypeGenerateOptions
21}
22
23export interface TypeGenerateOptions {
24 /** 类型文件输出路径 */
25 routesTypeFile: string
26 /** 是否生成路由参数类型 */
27 generateRouteParams?: boolean
28 /** 是否生成 Loader 类型 */
29 generateLoaderTypes?: boolean
30 /** 路由目录配置 */
31 routesDirectories?: RouteDirectory[]
32}
33
34export interface RouteDirectory {
35 /** 路由前缀 */
36 prefix?: string
37 /** 路由目录路径 */
38 path: string
39}
1// vite.config.ts
2import { defineConfig } from 'vite'
3import react from '@vitejs/plugin-react'
4import { FileBasedRouterVite } from '@feoe/fs-router/vite'
5
6export default defineConfig({
7 plugins: [
8 react(),
9 FileBasedRouterVite({
10 routesDirectory: 'src/routes',
11 generatedRoutesPath: 'src/routes.tsx',
12 enableGeneration: true,
13 // 类型生成选项
14 typeGenerateOptions: {
15 routesTypeFile: 'src/routes-type.ts',
16 generateRouteParams: true,
17 generateLoaderTypes: true,
18 routesDirectories: []
19 },
20 })
21 ]
22})
1// webpack.config.js
2const { FileBasedRouterWebpack } = require('@feoe/fs-router/webpack')
3
4module.exports = {
5 plugins: [
6 new FileBasedRouterWebpack({
7 routesDirectory: 'src/routes',
8 generatedRoutesPath: 'src/routes.tsx',
9 enableGeneration: true,
10 })
11 ]
12}
1// rspack.config.js
2const { FileBasedRouterRspack } = require('@feoe/fs-router/rspack')
3
4module.exports = {
5 plugins: [
6 new FileBasedRouterRspack({
7 routesDirectory: 'src/routes',
8 generatedRoutesPath: 'src/routes.tsx',
9 enableGeneration: true
10 })
11 ]
12}
1// rsbuild.config.js
2import { FileBasedRouterRspack } from "@feoe/fs-router/rspack"
3
4const pluginRouter = FileBasedRouterRspack({
5 routesDirectory: 'src/routes',
6 generatedRoutesPath: 'src/routes.tsx',
7 enableGeneration: true
8})
9
10export default defineConfig({
11 tools: {
12 rspack: {
13 plugins: [pluginRouter]
14 }
15 }
16})
1interface TypeGenerateOptions {
2 /** 类型文件输出路径,默认 'src/routes-type.ts' */
3 routesTypeFile: string
4 /** 是否生成路由参数类型,默认 true */
5 generateRouteParams?: boolean
6 /** 是否生成 Loader 类型,默认 true */
7 generateLoaderTypes?: boolean
8 /** 路由目录配置 */
9 routesDirectories?: RouteDirectory[]
10}
11
12interface RouteDirectory {
13 /** 路由前缀 */
14 prefix?: string
15 /** 路由目录路径 */
16 path: string
17}
路由文件未生成
1// 确保路径正确且有写入权限
2FileBasedRouterVite({
3 routesDirectory: 'src/routes', // 确保目录存在
4 generatedRoutesPath: 'src/routes.tsx' // 确保父目录存在
5})
类型生成失败
1// 确保 TypeScript 配置正确
2FileBasedRouterVite({
3 enableGeneration: true,
4 typeGenerateOptions: {
5 routesTypeFile: 'src/routes-type.ts' // 确保路径有效
6 }
7})
热更新不工作
确保监听选项正确配置,参考贡献指南