Skip to content

generateRouter

Auto-generate router configuration from uni-app's pages.json.

Quick Start

typescript
import { defineConfig } from 'vite'
import { generateRouter } from '@meng-xi/vite-plugin'

export default defineConfig({
	plugins: [generateRouter()]
})

Options

OptionTypeDefaultDescription
pagesJsonPathstring'src/pages.json'Path to pages.json
outputPathstring'src/router.config.ts'Output file path
outputFormat'ts' | 'js''ts'Output format
nameStrategyNameStrategy'camelCase'Route naming strategy
customNameGenerator(path: string) => string-Custom name generator
includeSubPackagesbooleantrueInclude sub-package routes
watchbooleantrueWatch for changes
metaMappingRecord<string, string>See belowStyle to meta field mapping
exportTypesbooleantrueExport type definitions (TS)
preserveRouteChangesbooleantruePreserve user route changes
enabledbooleantrueEnable the plugin
verbosebooleantrueShow detailed logs
errorStrategy'throw' | 'log' | 'ignore''throw'Error handling strategy

Route Naming Strategies

StrategyDescriptionExample PathGenerated Name
camelCaseCamel case/pages/user/profilepagesUserProfile
pascalCasePascal case/pages/user/profilePagesUserProfile
pathPath underscore/pages/user/profilepages_user_profile
customCustom function--

Default metaMapping

typescript
{
  navigationBarTitleText: 'title',
  requireAuth: 'requireAuth'
}

Examples

Output JavaScript

typescript
generateRouter({
	outputFormat: 'js',
	outputPath: 'src/router.config.js'
})

Custom Route Names

typescript
generateRouter({
	nameStrategy: 'custom',
	customNameGenerator: path => `route_${path.replace(/\//g, '_')}`
})

Custom Meta Mapping

typescript
generateRouter({
	metaMapping: {
		navigationBarTitleText: 'title',
		requireAuth: 'requireAuth',
		customField: 'custom'
	}
})

Exclude Sub-packages

typescript
generateRouter({
	includeSubPackages: false
})

Output Example

typescript
export interface RouteMeta {
	title?: string
	isTab?: boolean
	requireAuth?: boolean
	[key: string]: unknown
}

export interface RouteConfig {
	path: string
	name?: string
	meta?: RouteMeta
}

export const routes: RouteConfig[] = [
	{
		path: '/pages/index/index',
		name: 'pagesIndexIndex',
		meta: { title: 'Home', isTab: true }
	},
	{
		path: '/pages/user/profile',
		name: 'pagesUserProfile',
		meta: { title: 'Profile', requireAuth: true }
	}
]

export default routes

Notes

  • customNameGenerator is required when nameStrategy is 'custom'
  • TabBar pages automatically get isTab: true
  • preserveRouteChanges: true preserves user modifications to routes array
  • Supports parsing pages.json with comments

Released under the MIT License.