Skip to content

插件API

appDirectory

  • 类型: string
  • 默认值: 'app'

Remix 使用 app 作为默认的路由目录,这个插件也使用 app 作为默认的路由目录。如果你想要更改目录名称,你可以设置 appDirectory 选项。

ts
import { defineConfig } from 'vite'
import { remixFlatRoutes } from 'vite-plugin-remix-flat-routes'

export default defineConfig({
  plugins: [remixFlatRoutes({ appDirectory: 'src' })],
})

flatRoutesOptions

  • 类型: Pick< FlatRoutesOptions, 'paramPrefixChar' | 'routeDir' | 'routeRegex' | 'visitFiles' | 'basePath' | 'ignoredRouteFiles' | 'defineRoutes'>

flatRoutesOptionsremix-flat-routes 的选项相同,你可以将选项传递给插件。

了解有关选项的更多信息,请参阅 remix-flat-routes 文档

ts
import { defineConfig } from 'vite'
import { remixFlatRoutes } from 'vite-plugin-remix-flat-routes'

export default defineConfig({
  plugins: [
    remixFlatRoutes({
      flatRoutesOptions: {
        ignoredRouteFiles: ['**/components/**'],
        // other options
      },
    }),
  ],
})

routes

  • 类型: ( defineRoutes: DefineRoutesFunction, options: { ignoredRouteFiles: string[] }, ) => ReturnType<DefineRoutesFunction> | Promise<ReturnType<DefineRoutesFunction>>

你可以通过配置 routes 选项来定义自己的路由约定。

ts
import { defineConfig } from 'vite'
import { remixFlatRoutes } from 'vite-plugin-remix-flat-routes'

export default defineConfig({
  plugins: [
    remixFlatRoutes({
      routes(defineRoutes) {
        return defineRoutes((route) => {
          route('/somewhere/cool/*', 'catchall.tsx')
        })
      },
    }),
  ],
})

legacy

  • 类型: boolean

此插件也支持非data-api的路由,你可以设置 legacy 选项来开启传统路由模式。

默认情况下,插件会自动检测你的 react-router-dom 版本,如果版本小于等于 6.3.0,插件会自动开启传统路由模式。

handleAsync

  • 类型: boolean
  • 默认值: false

当路由是懒加载,但你需要路由中的handle数据时,可以把 handleAsync 设置为 true。 插件会将 handle 对象转化为异步函数,你可以手动直行函数来获取 handle 数据

在 Legacy 传统路由模式下,此选项始终为 true

ts
import { defineConfig } from 'vite'
import { remixFlatRoutes } from 'vite-plugin-remix-flat-routes'

export default defineConfig({
  plugins: [
    remixFlatRoutes({
      handleAsync: true,
    }),
  ],
})
tsx
export const handle = {
  i18n: ['home']
}
ts
import { matchRoutes, type RouteObject } from 'react-router-dom'
import { routes } from 'virtual:remix-flat-routes'

export async function resolveNamespace(pathname = window.location.pathname) {
  const res = await Promise.all(
    matchRoutes(routes as RouteObject[], pathname)?.map(async (route) => {
      const { handle } = route.route
      if (typeof handle === 'function') {
        return await handle()
      }
      return handle
    }) || [],
  )
  return res
    .filter((t) => t?.i18n)
    .map((t) => t.i18n)
    .flat()
}

reactRefresh

  • 类型: boolean
  • 默认值: true

@vitejs/plugin-react 的 hmr 只支持 React 组件。启用此选项以支持 react router 数据 api

你需要安装 @vitejs/plugin-react>=4.3.2@vitejs/plugin-react-swc>=3.6.0

Released under the MIT License.