版本0.1.6 | 协议MIT | 依赖Vite 5.0.0 8.0.0写在前面v0.1.6 的主题是让自动导入更智能让路由导航更安全让工具层更实用。v0.1.5 引入的autoImport插件需要逐一列举要导入的 API 名称——vue: [ref, reactive, computed, ...]列表一长就容易遗漏或多余。v0.1.6 带来的通配符*支持让你一行配置就能导入模块的全部命名导出。同时generateRouter新增了路由类型声明生成为meng-xi/uni-router扩展RouteNameMap接口实现类型安全的路由导航。此外Common 工具模块新增了 5 个通用函数插件代码也完成了规范化重构。本版重点能力一句话说明你需要做什么autoImport通配符导入vue: [*]自动导入模块所有命名导出更新配置autoImportVue SFC 注入import 语句注入到script setup块内部无需操作generateRouter类型声明生成router.d.ts扩展RouteNameMap接口新增配置Common 工具模块增强新增 parseTemplate、formatDate、writeFileSyncSafely 等按需导入插件代码规范化重构各插件非核心逻辑提取到common/子目录无需操作升级方式修改devDependencies中版本号为^0.1.6。无 Breaking Changes完全向后兼容。一、5 分钟快速上手1.1 安装与最小配置{devDependencies:{meng-xi/vite-plugin:^0.1.6}}import{autoImport,generateRouter}frommeng-xi/vite-pluginexportdefaultdefineConfig({plugins:[autoImport({imports:{vue:[*]},dts:true,vueTemplate:true}),generateRouter({dts:true})]})1.2 立刻看到效果之前逐一列举要导入的 APIautoImport({imports:{vue:[ref,reactive,computed,watch,watchEffect,onMounted,onUnmounted,nextTick,toRef,toRefs,...]}})之后一行搞定autoImport({imports:{vue:[*]}})插件会自动从vue的.d.ts类型声明文件中提取所有命名导出无需手动维护列表。1.3 路由类型安全之前路由名称是普通字符串拼错不会报错uni.navigateTo({name:pagesIndexIndx})// 拼错了运行时才发现之后启用dts: true后路由名称有类型检查uni.navigateTo({name:pagesIndexIndx})// TS 报错类型 pagesIndexIndx 不能分配给类型 pagesIndexIndex | ...二、核心能力一autoImport 通配符导入2.1 通配符解析策略当imports配置中使用*时插件会自动解析模块的所有命名导出imports: { vue: [*] } ↓ 1. 优先从 .d.ts 类型声明文件解析最准确 ↓ 失败 2. 尝试作为本地文件路径解析 ↓ 失败 3. 尝试从 node_modules 解析运行时入口 ↓ 失败 4. 返回空数组为什么优先使用.d.tsbundler 格式的运行时入口文件如vue.runtime.esm-bundler.js通常只包含export { compile }等极少导出而完整的 API 通过动态方式导出静态正则无法匹配。.d.ts文件包含完整的静态类型声明能准确反映模块的所有导出。2.2 使用方式// 简写格式autoImport({imports:{vue:[*],// 自动导入 vue 的所有命名导出vue-router:[*],// 自动导入 vue-router 的所有命名导出pinia:[defineStore,storeToRefs]// 也可以混合使用}})// 完整格式autoImport({imports:[{module:vue,names:[*]},{module:lodash,names:[debounce],defaultImport:false}]})2.3 Vue SFC 注入v0.1.6 修复了autoImport与 uni-app 插件的协同问题。此前transform钩子使用enforce: post导致裸模块标识符无法被 Vite 正确解析。现在改回enforce: pre并新增injectIntoScriptSetup函数将 import 语句注入到script setup块内部!-- 处理前 -- script setup langts const count ref(0) const double computed(() count.value * 2) /script !-- 处理后 -- script setup langts import { ref, computed } from vue const count ref(0) const double computed(() count.value * 2) /script2.4 修复列表问题原因修复vue: [*]只解析出compileresolveWildcardExports走了运行时入口优先从.d.ts解析node_modules文件被错误处理默认fileFilter未排除node_modules正则改为^(?!.*node_modules)裸模块标识符无法解析enforce: post时 Vite 已完成模块解析改回enforce: premakeCallback语法错误匿名函数作为函数声明调用改用 IIFE 形式2.5 配置选项变更选项变更前默认值变更后默认值说明imports--新增支持*通配符格式fileFilter/\.(vue|jsx|tsx|ts|js|mjs)$//^(?!.*node_modules).*\.(vue|jsx|tsx|ts|js|mjs)$/默认排除node_modules中的文件三、核心能力二generateRouter 路由类型声明3.1 类型声明生成新增dts选项为meng-xi/uni-router模块扩展RouteNameMap接口generateRouter({dts:true})生成的src/router.d.tsimportmeng-xi/uni-routerdeclaremodulemeng-xi/uni-router{interfaceRouteNameMap{/** 首页 */pagesIndexIndex:{path:/pages/index/index;meta:{title:string;isTab:true}}/** 个人中心 */pagesUserProfile:{path:/pages/user/profile;meta:{title:string;requireAuth:true}}}}3.2 dts 选项值行为false不生成类型声明文件默认true使用默认路径src/router.d.tsstring在指定路径生成类型声明文件3.3 类型声明特性TSDoc 注释每条路由自动生成页面标题注释完整元信息映射meta中的字符串字段类型为string布尔true字段类型为字面量true增量写入仅在内容发生变化时才写入文件减少不必要的文件 IO四、Common 工具模块增强v0.1.6 为 Common 工具模块新增了 5 个通用函数4.1 common/formatparseTemplate— 替换模板字符串中的{{key}}占位符import{parseTemplate}frommeng-xi/vite-plugin/common/formatparseTemplate(Hello {{name}}!,{name:World})// Hello World!parseTemplate({{YYYY}}-{{MM}}-{{DD}},getDateFormatParams())// 2026-06-07键名中的正则特殊字符会被自动转义值中的$也会被安全处理。formatDate— 使用{YYYY}、{MM}等占位符格式化日期字符串import{formatDate}frommeng-xi/vite-plugin/common/formatformatDate(newDate(),{YYYY}-{MM}-{DD}T{HH}:{mm}:{ss})// 2026-06-07T15:30:004.2 common/fswriteFileSyncSafely— 同步写入文件自动创建不存在的目录import{writeFileSyncSafely}frommeng-xi/vite-plugin/common/fs// 目录不存在时自动递归创建适用于 transform 等同步钩子writeFileSyncSafely(/project/src/auto-imports.d.ts,declare global { ... })shouldUpdateFileContent— 对比文件内容是否需要更新import{shouldUpdateFileContent}frommeng-xi/vite-plugin/common/fsif(shouldUpdateFileContent(/project/src/router.d.ts,newContent)){writeFileSyncSafely(/project/src/router.d.ts,newContent)}4.3 common/htmlescapeHtmlAttr— 转义 HTML 属性值中的特殊字符import{escapeHtmlAttr}frommeng-xi/vite-plugin/common/htmlescapeHtmlAttr(hello world friends)// hello quot;worldquot; amp; lt;friendsgt;转义、、、、五种字符防止属性注入攻击。五、插件代码规范化重构按照autoImport/common目录规范将各插件中不属于插件核心逻辑的函数、常量等提取到common/子目录通过common/index.ts聚合导出插件提取内容buildProgress/common常量和工具函数generateRouter/common路由工具函数和类型声明生成逻辑dts.tsenvGuard/common运行时守卫、模板生成、校验逻辑faviconManager/common类型定义htmlInject/common代码生成器和校验器loadingManager/common常量、函数体生成器、代码生成器和校验器versionUpdateChecker/common代码生成器和校验器重构原则插件主文件只保留生命周期钩子和核心流程工具函数和类型定义移入common/保持代码结构清晰、职责单一。六、实战场景6.1 Vue 3 uni-app 全家桶import{defineConfig}fromviteimportunifromdcloudio/vite-plugin-uniimport{autoImport,generateRouter}from./uni_modules/vite-plugin/js_sdk/index.mjsexportdefaultdefineConfig({plugins:[uni(),autoImport({imports:{vue:[*],dcloudio/uni-app:[onLaunch,onShow,onHide,onLoad]},dts:true,vueTemplate:true}),generateRouter({dts:true})]})6.2 纯 Vite 项目import{defineConfig}fromviteimport{autoImport,buildProgress,envGuard}frommeng-xi/vite-pluginexportdefaultdefineConfig({plugins:[autoImport({imports:{vue:[*],vue-router:[*],pinia:[defineStore,storeToRefs]},dirs:[src/composables],dts:src/auto-imports.d.ts,vueTemplate:true}),buildProgress({format:bar}),envGuard({required:{VITE_API_URL:{type:url,required:true}}})]})6.3 使用 Common 工具函数构建自定义插件import{writeFileSyncSafely,shouldUpdateFileContent}frommeng-xi/vite-plugin/common/fsimport{formatDate}frommeng-xi/vite-plugin/common/formatimport{escapeHtmlAttr}frommeng-xi/vite-plugin/common/html// 在 transform 钩子中同步写入类型声明文件functiongenerateAndWriteDts(filePath:string,content:string):void{if(shouldUpdateFileContent(filePath,content)){writeFileSyncSafely(filePath,content)}}// 格式化版本号constversionformatDate(newDate(),{YYYY}.{MM}.{DD})// 安全地注入 HTML 属性constsafeAttrescapeHtmlAttr(userInput)七、子路径导出变更子路径变更内容meng-xi/vite-plugin/common/format新增导出parseTemplate、formatDatemeng-xi/vite-plugin/common/fs新增导出writeFileSyncSafely、shouldUpdateFileContentmeng-xi/vite-plugin/common/html新增导出escapeHtmlAttr八、迁移指南从 v0.1.5 升级到 v0.1.61. 使用通配符简化配置可选// 之前autoImport({imports:{vue:[ref,reactive,computed,watch,onMounted,onUnmounted,nextTick]}})// 之后autoImport({imports:{vue:[*]}})2. 启用路由类型声明可选generateRouter({dts:true})// 或自定义路径generateRouter({dts:src/types/router.d.ts})3. 使用新增的 Common 工具函数可选import{parseTemplate,formatDate}frommeng-xi/vite-plugin/common/formatimport{writeFileSyncSafely,shouldUpdateFileContent}frommeng-xi/vite-plugin/common/fsimport{escapeHtmlAttr}frommeng-xi/vite-plugin/common/html本文基于meng-xi/vite-plugin0.1.6版本撰写所有代码示例均来自实际源码。