更新记录
1.4.0(2026-08-28) 下载此版本
新增 defineUniPage 宏与页面生成架构重构:扫描页面 → pages.json → 路由配置一条流水线,配套公共 DirectoryWatcher / TaskQueue 统一监听与串行生成,插件总数增至 17 个
页面配置:defineUniPage 宏(新增)
新增 defineUniPage 宏:在 <script setup>(或 <script> 顶层)中调用,功能与 <route-config> 自定义块一致,写法更贴近 JS/TS。
| 能力 | 说明 |
|---|---|
| 优先级 | 同一页面同时声明宏与 <route-config> 时,以宏为准(顶层字段按宏覆盖) |
| 参数 | JS 对象字面量,支持注释、单引号、尾随逗号与嵌套对象(tab / style / meta) |
| 运行时无痕 | 宏在扫描时被消费,构建时自动移除调用,无需 import |
| IDE 识别 | 自动生成全局类型声明 src/define-uni-page.d.ts(dts 选项可自定义路径或 false 关闭),Vue (Official) / Volar / tsc 开箱识别,获得类型提示与编译期检查 |
使用示例:
defineUniPage({
title: '首页',
isTab: true,
tab: { order: 0 }
})
<route-config> 自定义块同步增强:解析支持 JSONC 尾随逗号(与 lang="jsonc" 的 IDE 高亮语义一致)。
generatePages / generateUni(重构)
- 抽取公共
producePages()流水线:扫描页面 +<route-config>/defineUniPage→ 组装 → 合并,内存产出完整 pages 对象(不写盘) - generatePages 直接写盘,generateUni 内存直传阶段二,消除「先写盘再读盘」的往返
- 删除 generateUni 内部重复实现,统一复用 generatePages 公共逻辑
公共模块(新增)
| 模块 | 说明 |
|---|---|
| DirectoryWatcher(common/fs) | 目录递归监听器:统一管理多目录监听,提供 start / stop / size;平台不支持 recursive 时自动降级跳过并告警,避免插件崩溃 |
| TaskQueue(common/concurrency) | 串行任务队列:按提交顺序串行执行异步任务,单个任务失败不阻塞后续;用于高频文件监听时的并发读改写防护 |
监听与串行化统一
- generatePages / generateUni / generateRouter 三者统一使用 TaskQueue 串行生成,避免高频变更时并发读改写竞态
- generatePages / generateUni 统一使用 DirectoryWatcher 管理页面目录监听(此前为各自私有的
fs.watch循环) - generateRouter 监听 pages.json 变更时同样走串行队列(此前直接 await 重新生成)
factory(增强)
- 新增
FunctionHookMap类型:registerHook/registerOrderedHook的钩子名泛型约束收紧为仅限函数型钩子(排除 name / enforce / apply 等非函数属性) - 新增可重写的
getBaseDefaults()方法,便于子类覆盖基础默认配置(enabled / verbose / errorStrategy)
细节修复
- generatePages / generateUni 的
<route-config>虚拟模块请求匹配由id.includes('vue')收紧为id.includes('?vue'),避免误拦截 <route-config>解析支持 JSONC 尾随逗号,与lang="jsonc"的 IDE 高亮语义一致
1.3.0(2026-08-26) 下载此版本
新增 generateUni 组合入口插件,一条流水线完成「扫描页面 → pages.json → 路由配置」,插件总数增至 17 个
generateUni(新增)
新增第 17 个插件:将 generatePages(扫描页面 → 生成 pages.json)与 generateRouter(基于 pages.json → 生成路由配置)编排为一条流水线,内存数据直传不重复读盘,等价于两插件连用。原有两个插件保持不变,仍可独立使用。
核心能力:
| 能力 | 说明 |
|---|---|
| 流水线编排 | 阶段一扫描页面 + <route-config> 产出内存 pages 数据并写盘 pages.json;阶段二直接消费内存数据生成路由配置(+ 可选 dts) |
| 避免读盘往返 | 阶段二不再「先写盘再读盘」,直接使用阶段一的内存 pages 对象 |
| 配置分组 | 顶层公共项(pagesJsonPath / watch)+ pages 子对象(generatePages 参数)+ router 子对象(generateRouter 参数),避免 20+ 平铺选项 |
| 串行生成 | 监听页面目录变更时串行重跑「阶段一 + 阶段二」,避免并发读写竞态 |
| route-config 块拦截 | 拦截 <route-config> 虚拟模块请求为空模块,避免构建时被当作 JavaScript 解析报错 |
| 保留能力 | 完整继承 generatePages 的 tabBar 归集 / 分包 / 合并策略,与 generateRouter 的 preserveRouteChanges / metaMapping / dts 等 |
使用示例:
generateUni({
pagesJsonPath: 'src/pages.json',
pages: {
pagesDir: 'src/pages',
subPackages: [{ root: 'pages-sub', dir: 'src/pages-sub' }],
entryPage: 'pages/index/index',
tabBar: { color: '#999999', selectedColor: '#42b883' }
},
router: {
outputPath: 'src/router.config.ts',
nameStrategy: 'camelCase',
dts: 'src/router.d.ts'
}
})
迁移:原 generatePages({...}) + generateRouter({...}) 连用等价替换为 generateUni({ pages: {...}, router: {...} })。
generatePages(增强)
为 standalone 的 generatePages 补充 <route-config> 自定义块虚拟模块拦截:注册 transform 钩子,将 xxx.vue?vue&type=route-config&index=0 请求替换为空模块,避免生产构建把块内容当作 JavaScript 解析而报错(与
generateUni 行为一致,此前仅 generateUni 具备)。
proxyManager(优化)
生产构建优化:config 钩子新增 env.command === 'build' 拦截,构建时完全跳过代理规则加载与配置生成。
| 变更点 | 说明 |
|---|---|
| 避免无意义加载 | build 阶段不再加载 .proxyrc.ts、不再解析 envPrefix 覆盖 |
| 消除误导日志 | 移除 build 时的「已加载 X 条代理规则 (环境: production)」日志 |
| 行为不变 | 开发服务器(dev)下功能、规则、中间件、日志逻辑完全保持不变 |
背景:
config钩子在 serve 与 build 两个阶段都会执行,而代理配置与中间件仅对开发服务器有效,此前打包时会白白加载规则并输出误导性日志。
插件清单(变更)
- 插件总数由 16 增至 17,分组由 7 组不变
- generate 分组由 4 增至 5:
autoImport、generateUni、generatePages、generateRouter、generateVersion
子路径导出(新增)
@meng-xi/vite-plugin/plugins/generate/generate-uni新增导出:generateUni及类型GenerateUniOptions@meng-xi/vite-plugin/plugins/generate聚合导出generateUni及其类型
1.2.0(2026-08-25) 下载此版本
新增 generatePages 插件,扫描 Vue 文件 + <route-config> 自定义块动态生成 pages.json,插件总数增至 16 个
generatePages(新增)
新增第 16 个插件:扫描通过页面目录与页面内 <route-config> 自定义块,自动生成 / 更新 uni-app 的 pages.json 页面相关配置(pages / subPackages / tabBar),彻底解放手动配置页面。
核心能力:
| 能力 | 配置 / 用法 | 说明 |
|---|---|---|
| 主包页面生成 | pagesDir: 'src/pages' |
递归扫描生成 pages,页面路径稳定排序 |
| 分包页面生成 | subPackages: [{ root, dir }] |
自动扫描生成 subPackages |
| tabBar 归集 | <route-config> 声明 isTab + tabBar 模板 |
自动将 tab 页面归集到 tabBar.list |
| 就近声明配置 | <route-config> 自定义块 |
标题 / 样式 / meta / name / tab 在页面内就近声明 |
| 入口页固定 | entryPage: 'pages/index/index' |
保证 pages[0] 为启动页,不被字母序排序改写 |
| tabBar 排序 | <route-config>.tab.order |
按 order 升序排列 list,仅用于排序、不写入输出 |
| 合并策略 | 自动(无需配置) | 仅覆盖页面部分,保留 globalStyle / condition 等 |
| 开发监听 | watch: true(默认) |
页面目录文件变化时自动重新生成 |
route-config 自定义块:
在页面内就近声明配置(内容为 JSON,支持注释):
<route-config>
{
"title": "首页",
"name": "HomePage",
"meta": { "requireAuth": false },
"isTab": true,
"tab": { "text": "首页", "iconPath": "static/tab/home.png", "order": 0 }
}
</route-config>
| 字段 | 类型 | 说明 |
|---|---|---|
| title | string |
页面标题,映射为 style.navigationBarTitleText |
| name | string |
页面名称,写入 name 字段 |
| style | object |
原样写入 style 字段 |
| meta | object |
原样写入 meta 字段 |
| isTab | boolean |
是否为 tabBar 页面,自动归集到 tabBar.list |
| tab | TabBarItemOverride |
tabBar 图标 / 文本 / order 排序权重 |
配置选项:
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| pagesJsonPath | string |
'src/pages.json' |
pages.json 文件路径 |
| pagesDir | string |
'src/pages' |
主包页面目录 |
| subPackages | SubPackageConfig[] |
[{ root:'pages-sub', dir:'src/pages-sub' }] |
分包配置列表(目录缺失时跳过) |
| routeConfigBlock | string |
'route-config' |
页面配置自定义块名称 |
| entryPage | string |
现有 pages[0] |
主包入口页路径,固定为 pages[0] |
| titleFallback | 'filename' \| 'none' |
'filename' |
标题缺失时的兜底策略 |
| tabBar | TabBarTemplate |
- | tabBar 模板(提供后才生成) |
| includeExtensions | string[] |
['.vue'] |
页面文件扩展名列表 |
| excludePatterns | string[] |
['node_modules'] |
排除的路径模式列表 |
| watch | boolean |
true |
监听页面目录变化自动重新生成 |
类型完善:
TabBarItemOverride复用为overrides元素类型,与页面内tab保持一致- 页面排序
orderMainPages移入helpers目录,保持主插件文件聚焦
与 generateRouter 的关系:
generateRouter 是「读 pages.json → 生成路由配置」,generatePages 反向「扫描 Vue 文件 → 生成 pages.json」。二者可组合使用(generatePages 应置于 generateRouter 之前)。
插件清单(变更)
- 插件总数由 15 增至 16,分组由 7 组不变
- generate 分组由 3 增至 4:
autoImport、generatePages、generateRouter、generateVersion
子路径导出(新增)
@meng-xi/vite-plugin/plugins/generate/generate-pages新增导出:generatePages及类型GeneratePagesOptions、RouteConfigBlock、SubPackageConfig、TabBarTemplate、TabBarItemOverride、ScannedPage@meng-xi/vite-plugin/plugins/generate聚合导出generatePages及其关键类型
平台兼容性
uni-app(3.8.2)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
uni-app x(3.8.2)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | √ | √ |
@meng-xi/vite-plugin
Vite 实用插件集与插件开发框架(uni-app 版本)。
📖 完整文档:https://mengxi-studio.github.io/vite-plugin/
特性
- 开箱即用 - 17 个实用插件,覆盖构建、产物、路由、版本、HTML、代理等场景
- 插件开发框架 - 导出 BasePlugin、Logger、Validator,快速构建自定义插件
- 通用工具库 - 内置 14 大 Common 工具模块,支持子路径按需导入
- uni-app 适配 - 通过 uni_modules 集成,无需 npm 安装
安装
uni_modules(推荐)
将 vite-plugin 目录复制到项目的 uni_modules 目录下:
src/
└── uni_modules/
└── vite-plugin/
└── js_sdk/
└── index.mjs
npm
pnpm add @meng-xi/vite-plugin -D
npm 方式需将导入路径改为
@meng-xi/vite-plugin。
快速开始
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import {
assetManifest,
autoImport,
buildProgress,
compressAssets,
copyFile,
envGuard,
faviconManager,
generateUni,
generateVersion,
htmlInject,
imageOptimizer,
loadingManager,
proxyManager,
versionUpdateChecker
} from './uni_modules/vite-plugin/js_sdk/index.mjs'
export default defineConfig({
plugins: [
uni(),
// 按需启用插件
autoImport({ imports: ['vue'], vueTemplate: true }),
generateUni({
pages: { pagesDir: 'pages', entryPage: 'pages/index/index' },
router: { dts: true }
}),
generateVersion({ format: 'datetime', outputType: 'both' }),
envGuard({ required: { VITE_API_URL: { type: 'url', required: true } } }),
loadingManager({ defaultVisible: true, autoHideOn: 'DOMContentLoaded' }),
proxyManager({ rules: [{ context: '/api', target: 'https://api.example.com', changeOrigin: true }] })
]
})
页面配置:<route-config> 与 defineUniPage 宏
使用 generatePages / generateUni 时,页面配置可在 .vue 文件中就近声明,支持两种方式:
defineUniPage 宏(优先级更高):在 <script setup>(或 <script> 顶层)中调用,写法更贴近 JS/TS,参数为对象字面量,支持注释、单引号与尾随逗号:
<script setup lang="ts">
defineUniPage({
title: '首页',
isTab: true,
tab: { order: 0 }
})
</script>
同一页面同时声明宏与 <route-config> 时,以宏为准(顶层字段按宏覆盖)。插件默认自动生成全局类型声明 src/define-uni-page.d.ts(pages.dts 可自定义路径或 false 关闭),IDE 无需 import 即可识别宏,并获得类型提示与编译期检查。
<route-config> 自定义块(优先级低于宏):内容为 JSONC(支持注释与尾随逗号),建议添加 lang="jsonc" 属性,让 IDE(Vue (Official) / Volar)按 JSONC 语法高亮:
<route-config lang="jsonc">
{
"title": "首页",
"isTab": true,
"tab": { "order": 0 }
}
</route-config>
内置插件
| 插件 | 说明 |
|---|---|
| assetManifest | 资源清单生成 |
| autoImport | 自动导入(预设/别名/类型/目录扫描) |
| buildProgress | 终端构建进度条 |
| bundleAnalyzer | 构建产物体积分析 |
| compressAssets | 构建产物压缩(gzip/brotli) |
| copyFile | 文件复制 |
| envGuard | 环境变量校验 |
| faviconManager | 网站图标管理 |
| generateUni | 组合入口:页面配置 + 路由配置一条流水线(支持 <route-config> / defineUniPage 宏) |
| generateRouter | 路由配置生成(uni-app) |
| generatePages | 页面配置生成(动态生成 pages.json,支持 <route-config> / defineUniPage 宏) |
| generateVersion | 版本号生成与注入 |
| htmlInject | HTML 内容注入 |
| imageOptimizer | 图片优化与格式转换 |
| loadingManager | 全局 Loading 状态管理 |
| proxyManager | 开发服务器代理管理 |
| versionUpdateChecker | 运行时版本更新检查 |
各插件详细配置与 API 请查阅 官网插件文档。
插件开发框架
导出完整的插件开发框架,帮助快速构建符合规范的自定义 Vite 插件。
import { BasePlugin, createPluginFactory } from './uni_modules/vite-plugin/js_sdk/index.mjs'
import type { Plugin } from 'vite'
class MyPlugin extends BasePlugin<{ prefix?: string }> {
protected getPluginName() {
return 'my-plugin'
}
protected getDefaultOptions() {
return { prefix: '[app]' }
}
protected validateOptions() {
this.validator.field('prefix').string().notEmpty().validate()
}
protected addPluginHooks(plugin: Plugin) {
plugin.writeBundle = {
order: 'post',
handler: async () => {
await this.safeExecute(async () => {
this.logger.info('插件执行中...')
}, '执行自定义逻辑')
}
}
}
}
export const myPlugin = createPluginFactory(MyPlugin)
核心 API: BasePlugin(插件基类)、createPluginFactory(转换为 Vite 插件函数)、Logger(日志管理器)、Validator(链式配置验证器)。
详细 API 请查阅 官网框架文档。
Common 工具模块
内置通用工具函数库,按功能模块组织,支持子路径按需导入。
// 示例:按需导入
import { formatFileSize } from './uni_modules/vite-plugin/js_sdk/common/format/index.mjs'
import { scanDirectory } from './uni_modules/vite-plugin/js_sdk/common/fs/index.mjs'
import { deepMerge } from './uni_modules/vite-plugin/js_sdk/common/object/index.mjs'
import { normalizePath } from './uni_modules/vite-plugin/js_sdk/common/path/index.mjs'
| 子路径 | 描述 |
|---|---|
common/code |
JS 关键字、注释与字符串移除 |
common/compress |
gzip 压缩大小计算 |
common/concurrency |
并发限制批量异步执行 + 串行任务队列 |
common/env |
.env 文件解析 |
common/format |
日期、模板、文件大小格式化 |
common/fs |
文件检查、复制、扫描、写入、目录递归监听 |
common/hash |
随机哈希生成 |
common/html |
HTML 注入、消毒、属性转义 |
common/object |
深度合并对象 |
common/path |
路径规范化、扩展名过滤 |
common/script |
回调函数体安全包装 |
common/string |
大小写转换、JSON 注释移除 |
common/ui |
终端 ANSI 颜色码 |
common/validation |
链式验证器、全局名称校验 |
各工具函数详细 API 请查阅 官网工具文档。
子路径导出
| 子路径 | 描述 |
|---|---|
./js_sdk/index.mjs |
主入口(全部导出) |
./js_sdk/plugins/index.mjs |
所有插件 |
./js_sdk/factory/index.mjs |
插件开发框架 |
./js_sdk/logger/index.mjs |
日志管理器 |
./js_sdk/common/index.mjs |
所有工具函数 |
./js_sdk/common/<module>/index.mjs |
各工具子模块 |
./js_sdk/plugins/<name>/index.mjs |
各插件子模块 |

收藏人数:
https://github.com/MengXi-Studio/vite-plugin
https://www.npmjs.com/package/@meng-xi/vite-plugin
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 77
赞赏 0
下载 12564693
赞赏 1949
赞赏
京公网安备:11010802035340号