更新记录

1.0.0(2026-06-27) 下载此版本

首个稳定版本发布,API 稳定性承诺与生产就绪标志

里程碑说明

经过 0.x 系列(0.0.1 - 0.2.7)共 27 个版本的迭代,插件体系从最初的 2 个插件(copyFile、injectIco)发展到 15 个插件覆盖构建全生命周期,common 工具模块从零散函数发展为 14 个规范化子模块,插件开发框架(BasePlugin、Logger、Validator、createPluginFactory)趋于成熟。1.0.0 版本标记 API 稳定性,后续变更将严格遵循语义化版本规范。

与 0.x 的主要差异

维度 0.x(演进期) 1.0.0(稳定期)
API 稳定性 允许 Breaking Change 严格遵循 semver,破坏性变更需升主版本号
插件数量 从 2 个逐步增加到 15 个 15 个插件完整就绪
导出结构 单入口 ./plugins 7 个分组子路径 + 15 个插件单独子路径 + 主入口向后兼容
Common 工具 从零散函数到 14 个规范化子模块 14 个子模块稳定结构
类型安全 逐步补全 完整 TypeScript 类型 + global.d.ts 全局声明
配置体验 部分参数必填 所有插件零配置可用(参数可选化)
版本号管理 手动同步 构建时自动注入 __PLUGIN_VERSION__
错误处理 各插件自行处理 统一 errorStrategy 策略(throw / log / ignore)
钩子注册 手动包裹 enabled 检查 registerHook / registerOrderedHook 自动包裹

插件完整清单(15 个,7 个分组)

分组 插件 功能描述 执行时机
analyze buildProgress 终端构建进度条,支持 bar/spinner/minimal 构建期
analyze bundleAnalyzer 构建产物体积分析,生成 JSON/HTML 报告 enforce: 'post'
compress compressAssets gzip / brotli 压缩,生成 .gz / .br 文件 enforce: 'post'
compress imageOptimizer 图片压缩与格式转换(sharp + svgo) enforce: 'post'
copy assetManifest 资源清单生成,支持 vite/webpack/custom 格式 enforce: 'post'
copy copyFile 文件/目录复制,支持增量与并发 enforce: 'post'
generate autoImport 自动导入,支持通配符 '*' 与目录扫描 enforce: 'pre'
generate generateRouter 根据 pages.json 生成路由配置与类型声明 configResolved
generate generateVersion 版本号生成,支持多种格式与占位符 构建期
guard envGuard 环境变量校验,支持多类型与运行时守卫 enforce: 'post'
inject faviconManager 网站图标管理,支持字符串简写配置 transformIndexHtml
inject htmlInject HTML 内容注入,7 种位置与条件注入 transformIndexHtml
inject loadingManager 全局 Loading 状态管理,请求自动拦截 transformIndexHtml
inject versionUpdateChecker 运行时版本更新检查,三种提示 UI transformIndexHtml
proxy proxyManager 开发代理管理,支持路径匹配与延迟模拟 configureServer

Common 工具模块(14 个子模块)

子模块 核心导出 来源
common/code JS_KEYWORDSstripCommentsAndStrings autoImport
common/compress calculateGzipSize bundleAnalyzer
common/concurrency runWithConcurrency imageOptimizer
common/env parseEnvContent envGuard
common/format parseTemplateparseTemplateWithDelimiterparsePluginTemplateformatDateformatFileSizecalcRatio 多处复用
common/fs writeFileSyncSafelyshouldUpdateFileContentscanAndMapFilesdeleteFilesresolveReportPath 多处复用
common/hash generateRandomHash generateVersion
common/html injectBeforeTaginjectHeadAndBodyescapeHtmlAttr htmlInject
common/object deepMerge factory
common/path normalizePathisExtensionIncludedisPathExcludedisPreCompressed 多处复用
common/script makeCallback loadingManager
common/string toCamelCasetoPascalCasestripJsonCommentsescapeRegex autoImport
common/ui ANSISPINNER_FRAMESstripAnsi buildProgress
common/validation ValidatorvalidateGlobalNamevalidateNoScriptInTemplatevalidateCallbackFields 全局

插件开发框架

BasePlugin 抽象类:所有插件的基类,提供完整的生命周期管理

能力 方法/属性 说明
配置合并 mergeOptions 深度合并基础默认值、插件默认值与用户配置
日志记录 logger 每个实例独立的 PluginLogger 代理
配置验证 validator + validateOptions 泛型 Validator 流式验证
生命周期 onConfigResolved / destroy 配置解析完成回调 + 销毁清理
错误处理 safeExecute / safeExecuteSync / handleError errorStrategy 统一处理错误
钩子注册 registerHook / registerOrderedHook / registerTransformIndexHtml 自动包裹 enabled 检查与错误处理
插件转换 toPlugin 转换为 Vite 插件对象,自动注册 configResolved 与 closeBundle

createPluginFactory 工厂函数:支持选项标准化器(OptionsNormalizer),允许插件接受非对象类型的简写配置

Logger 单例日志系统:以实例 ID 为 key 管理每个插件实例的日志配置,避免同类型多实例冲突,支持 register / unregister / destroy 生命周期

Validator 泛型验证器:链式 API(required / enum / minValue / maxValue / custom 等),编译时类型安全保障

子路径导出总览

// 主入口(向后兼容)
import { compressAssets, generateRouter } from '@meng-xi/vite-plugin'

// 按分组导入(推荐,利于 Tree-shaking)
import { compressAssets } from '@meng-xi/vite-plugin/plugins/compress'
import { generateRouter } from '@meng-xi/vite-plugin/plugins/generate'
import { loadingManager } from '@meng-xi/vite-plugin/plugins/inject'

// 单插件导入
import { generateRouter } from '@meng-xi/vite-plugin/plugins/generate/generate-router'

// Common 工具
import { parsePluginTemplate } from '@meng-xi/vite-plugin/common/format'
import { deepMerge } from '@meng-xi/vite-plugin/common/object'

// 框架能力
import { BasePlugin, createPluginFactory } from '@meng-xi/vite-plugin/factory'
import { Logger } from '@meng-xi/vite-plugin/logger'

完整子路径清单

  • . — 主入口(导出全部)
  • ./common + 14 个 common 子模块(code/compress/concurrency/env/format/fs/hash/html/object/path/script/string/ui/validation)
  • ./factory — BasePlugin、createPluginFactory、类型定义
  • ./logger — Logger 单例、PluginLogger
  • ./plugins + 7 个分组子路径(analyze/compress/copy/generate/guard/inject/proxy)+ 15 个插件单独子路径

生产就绪声明

  • Vite 兼容性:支持 Vite 5.x - 7.x(peerDependencies: vite >=5.0.0 <8.0.0
  • TypeScript 支持:完整类型定义,types 字段指向 .d.ts 文件
  • 双格式输出:同时提供 ESM(.mjs)与 CJS(.cjs)构建产物
  • 可选依赖sharpsvgo 为可选依赖,不可用时优雅降级
  • 零配置可用:所有插件参数可选化,提供合理默认值

0.2.7(2026-06-26) 下载此版本

插件按功能分组导出,修复 generateRouter 类型注解生成缺陷

插件分组导出(新增)

变更:将 15 个插件按功能划分为 7 个分组,每个分组提供独立子路径导出,支持按需导入与 Tree-shaking

分组 包含插件 子路径
analyze buildProgress、bundleAnalyzer ./plugins/analyze
compress compressAssets、imageOptimizer ./plugins/compress
copy assetManifest、copyFile ./plugins/copy
generate autoImport、generateRouter、generateVersion ./plugins/generate
guard envGuard ./plugins/guard
inject faviconManager、htmlInject、loadingManager、versionUpdateChecker ./plugins/inject
proxy proxyManager ./plugins/proxy
// 0.2.6:单入口导入全部插件
import { compressAssets, generateRouter, loadingManager } from '@meng-xi/vite-plugin/plugins'

// 0.2.7:按组导入,利于 Tree-shaking
import { compressAssets } from '@meng-xi/vite-plugin/plugins/compress'
import { generateRouter } from '@meng-xi/vite-plugin/plugins/generate'
import { loadingManager } from '@meng-xi/vite-plugin/plugins/inject'

./plugins 主入口仍保留,向后兼容;各插件单独子路径(如 ./plugins/analyze/build-progress)同步开放

generateRouter(修复)

Bug 修复exportTypes: false 时生成的路由文件类型注解与 import 语句不一致

字段 0.2.6 0.2.7 说明
typeAnnotation isTS ? ': RouteConfig[]' : '' isTS && options.exportTypes ? ': RouteConfig[]' : '' 仅在启用类型导出时添加注解
// 0.2.6:exportTypes: false 时仍生成类型注解,但无 import 语句,导致 RouteConfig 未定义错误
export const routes: RouteConfig[] = [
    // ❌ RouteConfig 未定义
    // ...
]

// 0.2.7:exportTypes: false 时不生成类型注解,与 import 逻辑保持一致
export const routes = [
    // ✅ 无类型注解,无错误
    // ...
]

子路径导出(变更)

  • 新增 @meng-xi/vite-plugin/plugins/analyze 子路径导出
  • 新增 @meng-xi/vite-plugin/plugins/compress 子路径导出
  • 新增 @meng-xi/vite-plugin/plugins/copy 子路径导出
  • 新增 @meng-xi/vite-plugin/plugins/generate 子路径导出
  • 新增 @meng-xi/vite-plugin/plugins/guard 子路径导出
  • 新增 @meng-xi/vite-plugin/plugins/inject 子路径导出
  • 新增 @meng-xi/vite-plugin/plugins/proxy 子路径导出
  • 新增各插件单独子路径导出(如 ./plugins/analyze/build-progress./plugins/compress/compress-assets 等)

0.2.6(2026-06-25) 下载此版本

通用工具抽离与架构统一重构,版本号注入机制自动化

Common 工具模块(增强 + 新增)

新增 6 个子模块:将各插件内部重复的工具函数提取到 common 目录统一管理,消除冗余代码

子路径 新增导出 来源
common/code JS_KEYWORDS(JS 关键字集合)、stripCommentsAndStrings(移除注释与字符串) autoImport
common/compress calculateGzipSize(gzip 压缩大小计算) bundleAnalyzer
common/env parseEnvContent.env 文件解析,支持前缀过滤) envGuard
common/hash generateRandomHash(加密级随机哈希生成) generateVersion
common/object deepMerge(深度合并对象,跳过 undefined) factory
common/string toCamelCasetoPascalCase(大小写转换)、stripJsonComments(JSON 注释移除)、escapeRegex(正则转义) autoImport

common/format(增强)

新增函数 描述
parsePluginTemplate 插件专用模板解析函数,支持 {name}{date}{date:FORMAT}{version}{custom:KEY} 占位符,统一注释头模板处理
import { parsePluginTemplate } from './uni_modules/vite-plugin/js_sdk/common/format/index.mjs'

// 支持自定义日期格式和自定义字段
parsePluginTemplate('{name} {custom:author} {date:YYYY-MM-DD} {version}', {
    name: 'generate-router',
    version: '0.2.6',
    customFields: { author: 'MengXi Studio' }
})
// 输出:'generate-router MengXi Studio 2026-06-25 0.2.6'

版本号注入机制(重构)

变更:移除手动版本同步逻辑,改为构建时自动注入

0.2.5 0.2.6 说明
generate-exports.ts 手动同步 unbuild replace 配置自动注入 版本号来源从脚本维护改为构建期注入
硬编码版本号字符串 __PLUGIN_VERSION__ 全局变量 插件内部统一使用全局变量,无需手动更新
无类型声明 src/types/global.d.ts 新增全局类型声明,提供 TypeScript 类型支持

影响:generateRouter 注释头中的 {version} 占位符现在通过 __PLUGIN_VERSION__ 自动获取,版本号升级时无需修改插件源码

versionUpdateChecker(优化)

变更:自定义提示模板解析改用通用工具函数

0.2.5 0.2.6 说明
多次链式 .replace(/\{\{key\}\}/g, …) parseTemplateWithDelimiter 统一使用 common/format 模板解析函数
手动拼接 5 个占位符替换 传入 values 对象一次解析 代码更简洁,支持键名自动转义

插件目录结构(重构)

变更:统一插件内部助手目录命名,提升代码可维护性

0.2.5 0.2.6 说明
plugins/*/common/ plugins/*/helpers/ 所有插件内部 common 目录重命名为 helpers
faviconManager/common/type.ts faviconManager/types.ts 类型文件统一到插件根目录

此变更仅影响插件内部结构,对用户导入路径无影响

子路径导出(变更)

  • 新增 @meng-xi/vite-plugin/common/code 子路径导出
  • 新增 @meng-xi/vite-plugin/common/compress 子路径导出
  • 新增 @meng-xi/vite-plugin/common/env 子路径导出
  • 新增 @meng-xi/vite-plugin/common/hash 子路径导出
  • 新增 @meng-xi/vite-plugin/common/object 子路径导出
  • 新增 @meng-xi/vite-plugin/common/string 子路径导出
  • @meng-xi/vite-plugin/common/format 新增导出:parsePluginTemplate
  • @meng-xi/vite-plugin/common/code 新增导出:JS_KEYWORDSstripCommentsAndStrings
  • @meng-xi/vite-plugin/common/compress 新增导出:calculateGzipSize
  • @meng-xi/vite-plugin/common/env 新增导出:parseEnvContent
  • @meng-xi/vite-plugin/common/hash 新增导出:generateRandomHash
  • @meng-xi/vite-plugin/common/object 新增导出:deepMerge
  • @meng-xi/vite-plugin/common/string 新增导出:toCamelCasetoPascalCasestripJsonCommentsescapeRegex
查看更多

平台兼容性

uni-app(3.7.12)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

uni-app x(3.7.12)

Chrome Safari Android iOS 鸿蒙 微信小程序

其他

多语言 暗黑模式 宽屏模式

@meng-xi/vite-plugin

license npm npm

Vite 实用插件集与插件开发框架(uni-app 版本)。

📖 完整文档:https://mengxi-studio.github.io/vite-plugin/


特性

  • 开箱即用 - 15 个实用插件,覆盖构建、产物、路由、版本、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,
    generateRouter,
    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 }),
        generateRouter({ 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 }] })
    ]
})

内置插件

插件 说明
assetManifest 资源清单生成
autoImport 自动导入
buildProgress 终端构建进度条
bundleAnalyzer 构建产物体积分析
compressAssets 构建产物压缩(gzip/brotli)
copyFile 文件复制
envGuard 环境变量校验
faviconManager 网站图标管理
generateRouter 路由配置生成(uni-app)
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 各插件子模块

License

MIT

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议