import type { Plugin } from 'vite'; import { resolve, join } from 'node:path'; import process from 'node:process'; import { watch, readFileSync } from 'node:fs'; import { normalizePath } from 'vite'; import { registerRootApp, rebuildRootApp } from './root'; import { transformPage } from './page'; import { loadPagesJson, normalizePlatformPath, debounce } from './utils'; interface UniRootOptions { /** 根组件文件名(不含扩展名),默认 App.root */ rootFileName?: string; } /** * 规范化模块 ID:统一路径分隔符,统一 Windows 盘符为小写 */ function normalizeId(id: string) { return normalizePath(id).replace(/^[A-Z]:/, match => match.toLowerCase()); } /** * UniApp 虚拟根组件 Vite 插件 * * ## 解决的问题 * UniApp 不支持原生的根组件包裹机制,导致无法在全局统一注入 * u-config-provider、u-toast、u-modal 等组件。 * * ## 工作原理 * 1. 在 main.ts 中注入 App.root.vue 的导入,并注册为全局组件 global-root-view * 2. 在每个页面的