You've already forked template-MP-ts
80 lines
2.5 KiB
JavaScript
80 lines
2.5 KiB
JavaScript
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
|
||
|
||
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
|
||
}
|
||
|
||
// 写回文件
|
||
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,
|
||
},
|
||
},
|
||
},
|
||
})
|