From 140db73ef400cce3298d84ec91b23420d7fdded5 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Thu, 26 Feb 2026 15:21:36 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(startup-release):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Win/mac=20=E5=8F=91=E5=B8=83=E5=8C=85?= =?UTF-8?q?=E7=99=BD=E5=B1=8F=E4=B8=8E=E6=97=A0=E5=93=8D=E5=BA=94=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 v0.4.7 引入的高风险 chunk 拆分配置 - 恢复 main.tsx 的 Monaco 稳定初始化方式 - 调整 release workflow 的 macOS codesign 参数避免双击无反应 --- .github/workflows/release.yml | 4 +- frontend/src/main.tsx | 16 +---- frontend/vite.config.ts | 106 +--------------------------------- 3 files changed, 5 insertions(+), 121 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 01ae239..3f89c37 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -203,7 +203,9 @@ jobs: APP_NAME=$(basename "$APP_PATH") echo "🔏 正在进行 Ad-hoc 签名..." - codesign --force --options runtime --deep --sign - "$APP_NAME" + # 注意:Ad-hoc + hardened runtime(--options runtime)在未配置 entitlements 时, + # 可能导致部分 macOS 机型上应用双击无响应。这里保持 Ad-hoc 深签名但禁用 runtime hardened。 + codesign --force --deep --sign - "$APP_NAME" DMG_NAME="${{ matrix.build_name }}.dmg" FINAL_NAME="GoNavi-$VERSION-${{ matrix.os_name }}-${{ matrix.arch_name }}${{ matrix.artifact_suffix }}.dmg" diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 4b67fcd..9457771 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -6,21 +6,7 @@ import App from './App' // 全局配置 Monaco Editor 使用本地打包的文件,避免从 CDN (jsdelivr) 加载。 // Windows WebView2 环境下访问外部 CDN 可能失败,导致编辑器一直显示 Loading。 import { loader } from '@monaco-editor/react' -import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js' -import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js?worker' -import JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker.js?worker' -import 'monaco-editor/esm/vs/basic-languages/sql/sql.contribution.js' -import 'monaco-editor/esm/vs/language/json/monaco.contribution.js' - -(self as any).MonacoEnvironment = { - getWorker(_: unknown, label: string) { - if (label === 'json') { - return new JsonWorker() - } - return new EditorWorker() - }, -} - +import * as monaco from 'monaco-editor' loader.config({ monaco }) // 全局注册透明主题,避免每个 Editor 组件 beforeMount 中重复定义 diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 73a0e55..4b6e91a 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,54 +1,6 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' -const normalizeModuleId = (id: string): string => id.replace(/\\/g, '/') - -const sanitizeChunkToken = (raw: string): string => - String(raw || '') - .trim() - .replace(/[^a-zA-Z0-9_-]/g, '-') - .replace(/-+/g, '-') - .replace(/^-|-$/g, '') || 'misc' - -const firstSegmentAfter = (id: string, marker: string): string => { - const idx = id.indexOf(marker) - if (idx < 0) return '' - const rest = id.substring(idx + marker.length) - const [segment] = rest.split('/') - return sanitizeChunkToken(segment) -} - -const resolveMonacoChunk = (id: string, prefix: string): string | undefined => { - if (!id.includes('/node_modules/monaco-editor/')) return undefined - - if (id.includes('/esm/vs/language/typescript/')) { - if (id.includes('typescriptServices')) return `${prefix}-ts-services` - return `${prefix}-typescript` - } - if (id.includes('/esm/vs/language/json/')) return `${prefix}-json` - if (id.includes('/esm/vs/language/css/')) return `${prefix}-css` - if (id.includes('/esm/vs/language/html/')) return `${prefix}-html` - - if (id.includes('/esm/vs/editor/contrib/')) { - return `${prefix}-editor-contrib-${firstSegmentAfter(id, '/esm/vs/editor/contrib/')}` - } - if (id.includes('/esm/vs/editor/browser/')) { - return `${prefix}-editor-browser-${firstSegmentAfter(id, '/esm/vs/editor/browser/')}` - } - if (id.includes('/esm/vs/editor/common/')) { - return `${prefix}-editor-common-${firstSegmentAfter(id, '/esm/vs/editor/common/')}` - } - if (id.includes('/esm/vs/editor/')) return `${prefix}-editor` - - if (id.includes('/esm/vs/base/browser/')) return `${prefix}-base-browser` - if (id.includes('/esm/vs/base/common/')) return `${prefix}-base-common` - if (id.includes('/esm/vs/base/')) return `${prefix}-base` - - if (id.includes('/esm/vs/platform/')) return `${prefix}-platform` - - return `${prefix}-misc` -} - // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], @@ -59,61 +11,5 @@ export default defineConfig({ build: { outDir: 'dist', // Standard Wails output directory emptyOutDir: true, - rollupOptions: { - output: { - manualChunks(id) { - const moduleId = normalizeModuleId(id) - if (!moduleId.includes('node_modules')) return undefined - - const monacoChunk = resolveMonacoChunk(moduleId, 'vendor-monaco') - if (monacoChunk) { - return monacoChunk - } - if (moduleId.includes('/node_modules/@monaco-editor/react/')) return 'vendor-monaco-react' - - if (moduleId.includes('/node_modules/antd/es/')) { - return `vendor-antd-${firstSegmentAfter(moduleId, '/node_modules/antd/es/')}` - } - if (moduleId.includes('/node_modules/antd/')) return 'vendor-antd' - if (moduleId.includes('/node_modules/@ant-design/icons/')) return 'vendor-antd-icons' - if (moduleId.includes('/node_modules/@ant-design/cssinjs/')) return 'vendor-antd-css' - if (moduleId.includes('/node_modules/rc-')) return 'vendor-antd-rc' - - if (moduleId.includes('/node_modules/@dnd-kit/')) return 'vendor-dnd-kit' - if (moduleId.includes('/node_modules/sql-formatter/')) return 'vendor-sql-formatter' - - if ( - moduleId.includes('/node_modules/react/') - || moduleId.includes('/node_modules/react-dom/') - || moduleId.includes('/node_modules/scheduler/') - ) { - return 'vendor-react' - } - - if ( - moduleId.includes('/node_modules/zustand/') - || moduleId.includes('/node_modules/uuid/') - || moduleId.includes('/node_modules/clsx/') - || moduleId.includes('/node_modules/react-resizable/') - ) { - return 'vendor-utils' - } - - return 'vendor-misc' - }, - }, - }, - }, - worker: { - format: 'es', - rollupOptions: { - output: { - manualChunks(id) { - const moduleId = normalizeModuleId(id) - if (!moduleId.includes('node_modules')) return undefined - return resolveMonacoChunk(moduleId, 'worker-monaco') - }, - }, - }, - }, + } })