Root 提供了多种配置选项,让您可以根据项目需求自定义其行为。本文档将详细介绍所有可用的配置选项及其使用方法。
Root 的配置在 vite.config.(js|ts)
文件中的 UniKuRoot
插件选项中进行:
// vite.config.(js|ts)
import Uni from '@dcloudio/vite-plugin-uni'
import UniKuRoot from '@uni-ku/root'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [
UniKuRoot({
// 在这里配置 Root 选项
}),
Uni()
]
})
类型: string
默认值: 'App'
描述: 自定义虚拟根组件的文件名。
// vite.config.(js|ts)
UniKuRoot({
rootFileName: 'KuRoot'
})
配置后,您需要创建对应的 KuRoot.vue
文件作为虚拟根组件,而不是默认的 App.ku.vue
。
- 文件名不需要包含
.vue
后缀,Root 会自动添加 - 修改此配置后,原有的
App.ku.vue
将不再生效 - 确保项目中的所有引用都使用新的文件名
类型: boolean
默认值: false
描述: 是否启用全局自动注入 App.ku 实例。
// vite.config.(js|ts)
UniKuRoot({
enabledGlobalRef: true
})
启用后,您可以通过 getCurrentPages()
获取根组件实例:
<!-- src/pages/*.vue -->
<script setup lang="ts">
import { onMounted, ref } from 'vue'
const pagesStack = getCurrentPages()
const uniKuRoot = ref()
onMounted(() => {
uniKuRoot.value = pagesStack[pagesStack.length - 1].$vm.$refs.uniKuRoot
})
</script>
特性 | 局部启用 | 全局启用 |
---|
配置方式 | 在页面模板中使用 root 属性 | 在 vite.config 中设置 enabledGlobalRef: true |
使用范围 | 仅限当前页面 | 所有页面均可使用 |
性能影响 | 最小,按需加载 | 略高,全局注入 |
代码简洁性 | 需要在每个页面定义 ref | 一次配置,多处使用 |
适用场景 | 少量页面需要访问根组件 | 多个页面需要访问根组件 |
类型: string[]
默认值: []
描述: 排除不需要根组件的页面,支持 Glob 模式。
// vite.config.(js|ts)
UniKuRoot({
excludePages: [
'src/exclude.vue',
'src/exclude/**/*.vue',
'src/pages/login.vue',
'src/pages/error/**/*.vue'
]
})
excludePages
选项支持使用 Glob 模式进行灵活匹配:
模式 | 描述 | 示例 |
---|
*.vue | 匹配当前目录下所有 Vue 文件 | pages/*.vue |
**/*.vue | 匹配所有子目录中的 Vue 文件 | pages/**/*.vue |
src/login.vue | 匹配特定文件 | src/login.vue |
src/auth/** | 匹配特定目录下的所有文件 | src/auth/** |
1. 排除登录和注册页面
// vite.config.(js|ts)
UniKuRoot({
excludePages: [
'src/pages/login.vue',
'src/pages/register.vue',
'src/pages/forgot-password.vue'
]
})
2. 排除整个错误页面目录
// vite.config.(js|ts)
UniKuRoot({
excludePages: [
'src/error-pages/**'
]
})
3. 排除特定模式的页面
// vite.config.(js|ts)
UniKuRoot({
excludePages: [
'src/pages/public-*.vue', // 所有以 public- 开头的页面
'src/pages/**/*.test.vue' // 所有子目录中的测试页面
]
})
被排除在根组件之外的页面具有以下特点:
- 独立渲染:页面不会渲染到
<KuRootView />
中,而是直接渲染 - 无根组件上下文:无法访问根组件中定义的方法和数据
- 性能优化:减少了不必要的组件层级,提高渲染性能
- 特殊样式:可以应用不同于其他页面的样式和布局
类型: string
默认值: 'KuRootView'
描述: 自定义视图标签的名称。
// vite.config.(js|ts)
UniKuRoot({
viewTagName: 'AppView'
})
配置后,您需要在虚拟根组件中使用自定义的视图标签:
<!-- src/App.ku.vue -->
<template>
<div>
<AppView />
</div>
</template>
- 自定义标签名称不需要包含
<
和 >
,Root 会自动处理 - 确保自定义标签名称不与现有组件或 HTML 元素冲突
- 修改视图标签名称后,项目中所有使用该标签的地方都需要更新
类型: boolean
默认值: false
描述: 是否启用调试模式。
// vite.config.(js|ts)
UniKuRoot({
debug: true
})
启用调试模式后,Root 会在控制台输出以下信息:
- 根组件的创建和挂载过程
- 页面组件的创建和挂载过程
- 生命周期事件的触发顺序
- 组件实例的引用信息
- 排除页面的处理情况
[UniKuRoot Debug] Creating root component: App.ku.vue
[UniKuRoot Debug] Root component mounted
[UniKuRoot Debug] Processing page: src/pages/index.vue
[UniKuRoot Debug] Page component mounted
[UniKuRoot Debug] Root ref injected: uniKuRoot
[UniKuRoot Debug] Excluded page: src/pages/login.vue
- 调试模式仅建议在开发环境中使用,生产环境应关闭
- 调试信息可能会影响性能,特别是在页面数量较多的项目中
- 可以结合浏览器的开发者工具,更好地理解 Root 的工作原理
// vite.config.(js|ts)
import Uni from '@dcloudio/vite-plugin-uni'
import UniKuRoot from '@uni-ku/root'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [
// 若存在改变 pages.json 的插件,请将 UniKuRoot 放置其后
UniKuRoot({
// 自定义虚拟根组件文件名
rootFileName: 'KuRoot',
// 启用全局自动注入 App.ku 实例
enabledGlobalRef: true,
// 自定义视图标签名称
viewTagName: 'AppView',
// 启用调试模式
debug: process.env.NODE_ENV === 'development',
// 排除不需要根组件的页面
excludePages: [
'src/pages/login.vue',
'src/pages/register.vue',
'src/error-pages/**'
]
}),
Uni()
]
})
根据您的项目需求选择合适的配置:
- 小型项目:使用默认配置即可,无需额外设置
- 中型项目:考虑启用
enabledGlobalRef
以便在多个页面中共享根组件功能 - 大型项目:自定义
rootFileName
并合理使用 excludePages
排除特殊页面
在团队开发中,确保所有成员使用相同的 Root 配置:
- 将配置纳入版本控制:将
vite.config.(js|ts)
文件添加到 Git 仓库中 - 文档化配置决策:在项目文档中记录为什么选择特定的配置
- 使用配置文件:考虑将 Root 配置提取到单独的文件中,便于管理
合理使用配置选项以优化性能:
- 按需启用全局引用:只在需要时启用
enabledGlobalRef
- 合理排除页面:使用
excludePages
排除不需要根组件的页面,减少不必要的渲染 - 避免频繁更改配置:频繁更改
rootFileName
可能会导致项目结构混乱 - 生产环境关闭调试:确保在生产环境中关闭
debug
模式
当配置不生效时,请检查以下方面:
- 配置位置:确保
UniKuRoot
插件配置在正确的位置 - 插件顺序:确保
UniKuRoot
在修改 pages.json 的插件之后 - 文件路径:检查
excludePages
中的路径是否正确 - 缓存问题:尝试清除 Vite 缓存并重新启动开发服务器
- 启用调试模式:开启
debug
选项,查看详细的日志信息
根据不同环境使用不同的配置:
// vite.config.(js|ts)
import { defineConfig, loadEnv } from 'vite'
import Uni from '@dcloudio/vite-plugin-uni'
import UniKuRoot from '@uni-ku/root'
export default ({ mode }) => {
const env = loadEnv(mode, process.cwd())
return defineConfig({
plugins: [
UniKuRoot({
// 开发环境使用默认配置,生产环境自定义文件名
rootFileName: mode === 'development' ? 'App' : 'ProdRoot',
// 生产环境启用全局引用
enabledGlobalRef: mode === 'production',
// 开发环境启用调试
debug: mode === 'development',
// 生产环境排除更多页面
excludePages: mode === 'production'
? ['src/pages/login.vue', 'src/pages/test/**']
: ['src/pages/test/**']
}),
Uni()
]
})
}
在 TypeScript 项目中使用 Root:
// vite.config.ts
import { defineConfig } from 'vite'
import Uni from '@dcloudio/vite-plugin-uni'
import UniKuRoot from '@uni-ku/root'
import type { RootPluginOptions } from '@uni-ku/root'
const rootOptions: RootPluginOptions = {
rootFileName: 'KuRoot',
enabledGlobalRef: true,
viewTagName: 'AppView',
debug: process.env.NODE_ENV === 'development',
excludePages: [
'src/pages/login.vue',
'src/error-pages/**'
]
}
export default defineConfig({
plugins: [
UniKuRoot(rootOptions),
Uni()
]
})
在 monorepo 项目中,不同子项目可能需要不同的 Root 配置:
// apps/app-1/vite.config.js
import UniKuRoot from '@uni-ku/root'
export default {
plugins: [
UniKuRoot({
rootFileName: 'App1Root',
enabledGlobalRef: false,
viewTagName: 'App1View'
})
]
}
// apps/app-2/vite.config.js
import UniKuRoot from '@uni-ku/root'
export default {
plugins: [
UniKuRoot({
rootFileName: 'App2Root',
enabledGlobalRef: true,
viewTagName: 'App2View',
excludePages: ['src/pages/special/**']
})
]
}
Root 提供了基本的配置验证,当配置不正确时会在控制台显示警告或错误信息。常见的验证包括:
- 类型验证:确保配置值的类型正确
- 路径验证:检查
excludePages
中的路径是否存在 - 命名验证:确保
rootFileName
和 viewTagName
不包含非法字符 - 依赖验证:确保插件顺序正确,Root 在修改 pages.json 的插件之后
如果遇到配置验证错误,请根据错误信息调整配置。
Root 提供了 TypeScript 类型定义,以便在 TypeScript 项目中获得更好的类型支持:
// @uni-ku/root 类型定义
export interface RootPluginOptions {
/**
* 自定义虚拟根组件的文件名
* @default 'App'
*/
rootFileName?: string
/**
* 是否启用全局自动注入 App.ku 实例
* @default false
*/
enabledGlobalRef?: boolean
/**
* 自定义视图标签的名称
* @default 'KuRootView'
*/
viewTagName?: string
/**
* 是否启用调试模式
* @default false
*/
debug?: boolean
/**
* 排除不需要根组件的页面,支持 Glob 模式
* @default []
*/
excludePages?: string[]
}
Root 的配置选项提供了灵活的自定义能力,让您可以根据项目需求调整其行为。通过合理使用这些配置选项,您可以:
- 自定义虚拟根组件的文件名和视图标签
- 选择局部或全局方式访问根组件实例
- 排除不需要根组件的特殊页面
- 启用调试模式以便开发和故障排除
- 优化应用性能和开发体验
在配置 Root 时,请务必考虑项目的实际需求和团队的开发习惯,选择最适合的配置方案。