From a313fca4dddc96167799375a8e779c4b4b59f499 Mon Sep 17 00:00:00 2001 From: lucas Date: Wed, 24 Sep 2025 15:51:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=9C=A8App=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E6=89=93=E5=8C=85=E6=97=B6=EF=BC=8Cmanifest.config.ts?= =?UTF-8?q?=E4=B8=AD=E9=85=8D=E7=BD=AE=E9=9C=80=E8=A6=81=E5=90=AF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E5=9D=97=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82=E6=AF=94=E5=A6=82=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E3=80=81=E6=94=AF=E4=BB=98=E5=AE=9D=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=9C=A8manifest.config.ts=E4=B8=AD=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vite-plugins/sync-manifest-plugins.ts | 64 +++++++++++++++++++++++++++ vite.config.ts | 2 + 2 files changed, 66 insertions(+) create mode 100644 vite-plugins/sync-manifest-plugins.ts diff --git a/vite-plugins/sync-manifest-plugins.ts b/vite-plugins/sync-manifest-plugins.ts new file mode 100644 index 0000000..9ba7b0d --- /dev/null +++ b/vite-plugins/sync-manifest-plugins.ts @@ -0,0 +1,64 @@ +import type { Plugin } from 'vite' +import fs from 'fs' +import path from 'path' + +interface ManifestType { + plus?: { + distribute?: { + plugins?: Record + } + } + 'app-plus'?: { + distribute?: { + plugins?: Record + } + } +} + +export default function syncManifestPlugin(): Plugin { + return { + name: 'sync-manifest', + apply: 'build', + enforce: 'post', + writeBundle: { + order: 'post', + handler() { + const srcManifestPath = path.resolve(process.cwd(), './src/manifest.json') + const distAppPath = path.resolve(process.cwd(), './dist/dev/app/manifest.json') + + try { + // 读取源文件 + const srcManifest = JSON.parse(fs.readFileSync(srcManifestPath, 'utf8')) as ManifestType + + // 确保目标目录存在 + const distAppDir = path.dirname(distAppPath) + if (!fs.existsSync(distAppDir)) { + fs.mkdirSync(distAppDir, { recursive: true }) + } + + // 读取目标文件(如果存在) + let distManifest: ManifestType = {} + if (fs.existsSync(distAppPath)) { + distManifest = JSON.parse(fs.readFileSync(distAppPath, 'utf8')) + } + + // 如果源文件存在 plugins + if (srcManifest['app-plus']?.distribute?.plugins) { + // 确保目标文件中有必要的对象结构 + if (!distManifest.plus) distManifest.plus = {} + if (!distManifest.plus.distribute) distManifest.plus.distribute = {} + + // 复制 plugins 内容 + distManifest.plus.distribute.plugins = srcManifest['app-plus'].distribute.plugins + + // 写入更新后的内容 + fs.writeFileSync(distAppPath, JSON.stringify(distManifest, null, 2)) + console.log('✅ Manifest plugins 同步成功') + } + } catch (error) { + console.error('❌ 同步 manifest plugins 失败:', error) + } + }, + }, + } +} diff --git a/vite.config.ts b/vite.config.ts index 4c9d0c2..e41033f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -25,6 +25,7 @@ import AutoImport from 'unplugin-auto-import/vite' import { defineConfig, loadEnv } from 'vite' import ViteRestart from 'vite-plugin-restart' import openDevTools from './scripts/open-dev-tools' +import syncManifestPlugin from './vite-plugins/sync-manifest-plugins' // https://vitejs.dev/config/ export default defineConfig(({ command, mode }) => { @@ -125,6 +126,7 @@ export default defineConfig(({ command, mode }) => { }), // 只有在 app 平台时才启用 copyNativeRes 插件 // UNI_PLATFORM === 'app' && copyNativeRes(), + syncManifestPlugin(), Components({ extensions: ['vue'], deep: true, // 是否递归扫描子目录,