import { defineConfig } from 'vite' import uni from '@dcloudio/vite-plugin-uni' import { resolve } from 'path' import { readFileSync, writeFileSync, existsSync, unlinkSync } from 'fs' import dotenv from 'dotenv' // 自定义插件:替换 manifest.json 中的 appid // 仅在通过HBuilder首次编译时执行,避免热重载时重复执行导致内存占用高 function replaceManifestAppid() { return { name: 'replace-manifest-appid', buildStart() { // 检查是否通过HBuilder编译 // 检查是否已经执行过插件 const manifestUpdatedFlag = resolve(__dirname, '.manifest-updated') const isFirstCompile = !existsSync(manifestUpdatedFlag) // 仅首次编译时执行 if (!isFirstCompile) { console.log('跳过 manifest appid 更新(已执行过首次编译)') return } // 获取环境变量,明确指定路径为项目根目录 dotenv.config({ path: resolve(__dirname, '.env') }) const appid = process.env.VITE_APPID const uni_appId = process.env.VITE_UNI_APPID const libVersion = process.env.VITE_LIBVERSION || '3.0.0' if (appid && uni_appId) { // 读取 manifest.json 文件 const manifestPath = resolve(__dirname, 'manifest.json') let manifestContent = readFileSync(manifestPath, 'utf-8') // 解析 JSON const manifest = JSON.parse(manifestContent) // 替换 manifest.appid = uni_appId if (manifest['mp-weixin']) { manifest['mp-weixin'].appid = appid manifest['mp-weixin'].libVersion = libVersion } // 写回文件 writeFileSync(manifestPath, JSON.stringify(manifest, null, 4)) // 创建标记文件,表示已执行过插件 writeFileSync(manifestUpdatedFlag, 'Manifest updated by HBuilder first compile') console.log(`Manifest appid 已更新为: ${uni_appId}`) console.log(`Manifest mp-weixin appid 已更新为: ${appid}`) } else { console.warn('未找到 VITE_APPID 和 VITE_UNI_APPID 环境变量,使用默认值') } }, } } // 检查是否通过HBuilder编译,决定是否启用插件 const manifestUpdatedFlag = resolve(__dirname, '.manifest-updated') if (existsSync(manifestUpdatedFlag)) { unlinkSync(manifestUpdatedFlag) console.log('已清理 manifest 更新标记文件') } const plugins = manifestUpdatedFlag ? [replaceManifestAppid(), uni()] : [uni()] export default defineConfig({ plugins, resolve: { alias: { '@': '/src', }, }, build: { minify: 'terser', terserOptions: { compress: { drop_console: true, }, }, }, })