版本:0.2.4 | 协议:MIT | 依赖:Vite >=5.0.0 <8.0.0
写在前面
v0.2.4 的主题是:让 pages.json 成为路由配置的唯一权威来源。
本次更新聚焦两个方面:一是为 UniAppPageConfig 新增 name 属性,支持在 pages.json 中直接配置页面路由名称,优先级高于 nameStrategy 自动生成;二是优化 preserveRouteChanges 合并策略,明确 pages.json
是自动生成字段的唯一来源,name 和 meta 中来自 pages.json 的字段始终使用新值,仅保留用户自定义的额外字段。
本版重点:
| 能力 | 一句话说明 | 你需要做什么 |
|---|---|---|
页面级 name 字段支持 |
pages.json 中可直接为页面配置路由名称,优先级高于 nameStrategy |
在 pages.json 中配置 |
preserveRouteChanges 策略优化 |
pages.json 是自动生成字段的唯一来源,name/meta 始终使用新值 |
自动生效 |
升级方式 :修改 devDependencies 中版本号为 ^0.2.4。无 Breaking Changes,完全向后兼容。
一、5 分钟快速上手
1.1 安装与升级
json
{
"devDependencies": {
"@meng-xi/vite-plugin": "^0.2.4"
}
}
1.2 在 pages.json 中直接配置 name
json
{
"pages": [
{
"path": "pages/index/index",
"name": "Home",
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/user/profile",
"name": "UserProfile",
"style": {
"navigationBarTitleText": "个人中心"
}
}
]
}
生成的路由配置:
typescript
import type { RouteConfig } from '@meng-xi/uni-router'
export const routes: RouteConfig[] = [
{
path: '/pages/index/index',
name: 'Home',
meta: { title: '首页', isTab: true }
},
{
path: '/pages/user/profile',
name: 'UserProfile',
meta: { title: '个人中心' }
}
]
export default routes
二、页面名称 name 字段
2.1 优先级规则
name 字段的取值优先级:
| 优先级 | 来源 | 说明 |
|---|---|---|
| 1(高) | pageConfig.name |
pages.json 中页面直接配置的 name 字段 |
| 2(低) | nameStrategy |
根据 path 和命名策略自动生成 |
typescript
// pages.json
{
"path": "pages/user/profile",
"name": "UserProfile",
"style": { "navigationBarTitleText": "个人中心" }
}
// 生成的路由中 name 为 'UserProfile',而非 nameStrategy 自动生成的 'pagesUserProfile'
2.2 与 nameStrategy 共存
未配置 name 的页面仍使用 nameStrategy 自动生成:
json
{
"pages": [
{
"path": "pages/index/index",
"name": "Home",
"style": { "navigationBarTitleText": "首页" }
},
{
"path": "pages/about/about",
"style": { "navigationBarTitleText": "关于" }
}
]
}
typescript
// Home 使用 pageConfig.name,about 使用 nameStrategy 自动生成
export const routes: RouteConfig[] = [
{ path: '/pages/index/index', name: 'Home', meta: { title: '首页' } },
{ path: '/pages/about/about', name: 'pagesAboutAbout', meta: { title: '关于' } }
]
三、preserveRouteChanges 合并策略优化
3.1 设计原则
pages.json 是自动生成字段的唯一权威来源。 用户不应在 router.config.ts 中手动修改来自 pages.json 的字段值,因为这些值会在下次生成时被覆盖。
3.2 字段合并规则
| 字段 | 优化前 | 优化后 |
|---|---|---|
name |
用户修改的值优先保留 | 始终以 pages.json 为准(pageConfig.name 或 nameStrategy) |
meta 自动生成字段 |
用户修改的值优先保留 | pages.json 生成的字段始终使用新值 |
meta 用户自定义字段 |
保留 | 保留(不变) |
3.3 实际场景
typescript
// pages.json 中修改了标题
{ "path": "pages/index/index", "style": { "navigationBarTitleText": "新标题" } }
// 用户在 router.config.ts 中添加了自定义字段
{
path: '/pages/index/index',
name: 'pagesIndexIndex',
meta: { title: '旧标题', customField: 'value' },
beforeEnter: (to, from, next) => { next() }
}
// 优化前:meta.title 保留 '旧标题'(用户修改优先)
// 优化后:meta.title 更新为 '新标题'(pages.json 为准),customField 保留
{
path: '/pages/index/index',
name: 'pagesIndexIndex',
meta: { title: '新标题', customField: 'value' },
beforeEnter: (to, from, next) => { next() }
}
四、完整配置项
typescript
interface GenerateRouterOptions extends BasePluginOptions {
pagesJsonPath?: string // pages.json 路径,默认 'src/pages.json'
outputPath?: string // 输出文件路径,默认 'src/router.config.ts'
outputFormat?: 'ts' | 'js' // 输出格式,默认 'ts'
nameStrategy?: NameStrategy // 命名策略,默认 'camelCase'
customNameGenerator?: (path: string) => string // 自定义命名函数
includeSubPackages?: boolean // 包含子包,默认 true
watch?: boolean // 监听变化,默认 true
metaMapping?: Record<string, string> // meta 字段映射
exportTypes?: boolean // 导出类型,默认 true
preserveRouteChanges?: boolean // 保留用户修改,默认 true
dts?: string | boolean // 类型声明文件,默认 false
fileHeader?: boolean // 文件注释头,默认 false
}
五、实战场景
5.1 使用页面名称 + 自定义守卫
typescript
// vite.config.ts
import { generateRouter } from '@meng-xi/vite-plugin'
export default defineConfig({
plugins: [
generateRouter({
fileHeader: true,
preserveRouteChanges: true,
metaMapping: {
navigationBarTitleText: 'title'
},
dts: true
})
]
})
json
// pages.json --- 使用 name 字段配置路由名称
{
"pages": [
{
"path": "pages/index/index",
"name": "Home",
"style": { "navigationBarTitleText": "首页" }
},
{
"path": "pages/admin/dashboard",
"name": "AdminDashboard",
"style": { "navigationBarTitleText": "管理后台" },
"meta": { "requireAuth": true, "role": "admin" }
}
]
}
六、内置插件全景
v0.2.4 共包含 15 个实用插件,覆盖构建优化的各个方面:
| 插件 | enforce | 描述 |
|---|---|---|
assetManifest |
post | 构建后生成资源映射清单,支持 Vite/Webpack/自定义格式、按入口分组和运行时注入 |
autoImport |
pre | 自动导入,支持预设映射、通配符('*')、目录扫描、Vue 模板自动导入和类型声明生成 |
buildProgress |
- | 终端实时构建进度条,支持 bar / spinner / minimal |
bundleAnalyzer |
post | 构建产物体积分析,支持 JSON/HTML 报告、gzip 计算和阈值告警 |
compressAssets |
post | 构建产物压缩,支持 gzip / brotli / both,并发压缩和统计报告 |
copyFile |
post | 构建完成后复制文件或目录,支持增量复制 |
envGuard |
post | 环境变量校验,支持类型检查、范围验证、自定义规则和运行时守卫 |
faviconManager |
post | 管理网站图标链接注入和文件复制 |
generateRouter |
post | 根据 pages.json 自动生成路由配置与类型声明(uni-app) |
generateVersion |
post | 自动生成版本号,支持文件输出和全局变量注入 |
htmlInject |
post | HTML 内容注入,支持多种位置、选择器定位、条件注入和安全过滤 |
imageOptimizer |
post | 图片优化压缩与格式转换,支持 WebP/AVIF 转换、SVG 优化、并发处理 |
loadingManager |
post | 全局 Loading 状态管理,支持请求拦截、防抖、过渡动画 |
proxyManager |
- | 开发代理管理,支持环境切换、规则文件、请求日志、延迟模拟和响应修改 |
versionUpdateChecker |
post | 运行时版本更新检查,支持多种提示样式和自定义回调 |
七、子路径导出变更
新增
UniAppPageConfig类型新增name可选字段,支持页面级路由名称配置