milkup-dev
npx skills add https://github.com/auto-plugin/milkup --skill milkup-dev
Agent 安装分布
Skill 文档
milkup å¼åç¯å¢å·¥å ·
å¿«éåè
milkup-dev æ¯ä¸é¨ä¸º milkup 项ç®è®¾è®¡çå¼åç¯å¢ç®¡çå·¥å ·ï¼æ·±å ¥äºè§£é¡¹ç®çææ¯æ åæ¶æã
milkup æ¯ä¸ä¸ªç°ä»£åçæ¡é¢ç«¯ Markdown ç¼è¾å¨ï¼åºäº Electron 37+ æå»ºï¼ä½¿ç¨ Vue 3 ä½ä¸ºåç«¯æ¡æ¶ï¼ Milkdown ä½ä¸ºç¼è¾å¨æ ¸å¿ï¼æ¯ææè§å³æå¾ï¼WYSIWYGï¼åæºç ç¼è¾å模å¼ã
èªå¨è§¦åï¼å½ç¨æ·è¯·æ±å¯å¨å¼åç¯å¢ãè¿è¡åºç¨ãè¿è¡å¼åè°è¯æè¯¢é®ææ¯æ ç¸å ³é®é¢æ¶ã
ææ¯æ æ¦è§
æ ¸å¿æ¡æ¶ï¼
- Electron 37+ – æ¡é¢åºç¨æ¡æ¶ï¼Chromium 130 + Node.js 20.18ï¼
- Vue 3.5+ – æ¸è¿å¼åç«¯æ¡æ¶ï¼ä½¿ç¨ Composition API
- TypeScript 5.9+ – ç±»åå®å ¨ç JavaScript è¶ éï¼å¯ç¨ strict 模å¼
- Vite 7+ – ä¸ä¸ä»£å端æå»ºå·¥å ·ï¼æä¾æéç HMR
ç¼è¾å¨æ ¸å¿ï¼
- Milkdown 7.17+ – åºäº ProseMirror çæä»¶å Markdown ç¼è¾å¨
- @milkdown/crepe – Milkdown çæè§å³æå¾ï¼WYSIWYGï¼æ¨¡å¼
- @milkdown/kit – Milkdown 宿´æä»¶å¥ä»¶
- CodeMirror 6 – æºç ç¼è¾æ¨¡å¼ç代ç ç¼è¾å¨
- Vditor 3.11+ – é¢å¤ç Markdown ç¼è¾åè½æ¯æ
æå»ºå·¥å ·é¾ï¼
- Vite – 渲æè¿ç¨æå»ºåå¼åæå¡å¨
- esbuild – 主è¿ç¨åé¢å è½½èæ¬çå¿«éæå»º
- vite-plugin-electron – Electron ä¸ Vite çéææä»¶
- electron-builder – å¤å¹³å°åºç¨æå å·¥å ·
å½é åä¸å·¥å ·ï¼
- vite-auto-i18n-plugin – èªå¨å½é åç¿»è¯æä»¶
- oxlint – å¿«éç JavaScript/TypeScript ä»£ç æ£æ¥å·¥å ·
- oxfmt – å¿«éçä»£ç æ ¼å¼åå·¥å ·
- simple-git-hooks – è½»é级 Git é©å管ç
UI ä¸å¢å¼ºï¼
- @vueuse/core – Vue ç»åå¼ API å·¥å ·é
- vue-draggable-plus – ææ½åè½æ¯æ
- autodialog.js – å¯¹è¯æ¡ç®¡ç
- autotoast.js – éç¥æç¤ºç®¡ç
- mermaid – å¾è¡¨æ¸²ææ¯æ
é¡¹ç®æ¶æ
è¿ç¨æ¶æï¼
milkup éµå¾ª Electron çå¤è¿ç¨æ¶æã主è¿ç¨ï¼Main Processï¼è¿è¡å¨ Node.js ç¯å¢ä¸ï¼ è´è´£çªå£ç®¡çãæä»¶ç³»ç»è®¿é®ãIPC éä¿¡å¤çåç³»ç»éæã渲æè¿ç¨ï¼Renderer Processï¼ è¿è¡å¨ Chromium ä¸ï¼è´è´£ UI 渲æåç¨æ·äº¤äºï¼éè¿é¢å è½½èæ¬ï¼Preload Scriptï¼ ä¸ä¸»è¿ç¨è¿è¡å®å ¨ç IPC éä¿¡ã
ç®å½ç»æï¼
src/
âââ main/ # 主è¿ç¨ä»£ç
â âââ index.ts # 主è¿ç¨å
¥å£ï¼çªå£å建åçå½å¨æç®¡ç
â âââ ipcBridge/ # IPC éä¿¡å¤çå¨
â âââ menu/ # åºç¨èåå®ä¹
â âââ update/ # èªå¨æ´æ°é»è¾
âââ renderer/ # 渲æè¿ç¨ä»£ç ï¼Vue åºç¨ï¼
â âââ App.vue # æ ¹ç»ä»¶
â âââ main.ts # 渲æè¿ç¨å
¥å£
â âââ components/ # Vue ç»ä»¶
â â âââ editor/ # ç¼è¾å¨ç»ä»¶ï¼MilkdownãCodeMirrorï¼
â â âââ workspace/ # å·¥ä½åºåæ ç¾é¡µç®¡ç
â â âââ outline/ # ææ¡£å¤§çº²å¯¼èª
â â âââ menu/ # èåæ åç¶ææ
â â âââ settings/ # 设置页é¢
â â âââ dialogs/ # å¯¹è¯æ¡ç»ä»¶
â â âââ ui/ # éç¨ UI ç»ä»¶
â âââ hooks/ # Vue ç»åå¼å½æ°
â âââ services/ # ä¸å¡é»è¾æå¡
â âââ plugins/ # Milkdown æä»¶
â âââ styles/ # æ ·å¼æä»¶
â âââ utils/ # å·¥å
·å½æ°
âââ preload.ts # é¢å è½½èæ¬ï¼æ´é²å®å
¨ç API ç»æ¸²æè¿ç¨
âââ shared/ # 主è¿ç¨å渲æè¿ç¨å
±äº«çç±»åå常é
âââ types/ # TypeScript ç±»åå®ä¹
âââ themes/ # 主é¢ç³»ç»
âââ plugins/ # åºç¨çº§æä»¶
âââ config/ # é
ç½®æä»¶
åçªå£ç³»ç»ï¼
milkup å®ç°äºåçªå£æ¶æã主çªå£ï¼Main Windowï¼æ¯ä¸»è¦çç¼è¾å¨çé¢ï¼ å å«ç¼è¾å¨ãå·¥ä½åºã大纲åèåæ ã主é¢ç¼è¾å¨çªå£ï¼Theme Editor Windowï¼ æ¯ä¸ä¸ªç¬ç«ç模æçªå£ï¼ç¨äºèªå®ä¹åç¼è¾ä¸»é¢æ ·å¼ã两个çªå£éè¿ IPC éä¿¡ å ±äº«ç¶æåæ°æ®ã
è·¯å¾å«åé ç½®ï¼
项ç®é ç½®äºä¸ä¸ªè·¯å¾å«å以ç®åå¯¼å ¥ï¼
@/– æåsrc/ç®å½ï¼ç¨äºè®¿é®æææºä»£ç @renderer/– æåsrc/renderer/ç®å½ï¼ç¨äºæ¸²æè¿ç¨ä»£ç @ui/– æåsrc/renderer/components/ui/ç®å½ï¼ç¨äº UI ç»ä»¶
æ ¸å¿åè½ç¹æ§
ç¼è¾å¨æ¨¡å¼ï¼
milkup æ¯æä¸¤ç§ç¼è¾æ¨¡å¼çæ ç¼åæ¢ãæè§å³æå¾æ¨¡å¼ï¼WYSIWYGï¼ä½¿ç¨ Milkdown ç Crepe 主é¢ï¼æä¾ç±»ä¼¼ Typora ç峿¶æ¸²æä½éªãæºç 模å¼ä½¿ç¨ CodeMirror 6ï¼ æä¾è¯æ³é«äº®ãä»£ç æå å Markdown è¯æ³æ¯æãä¸¤ç§æ¨¡å¼å ±äº«åä¸ä»½ææ¡£æ°æ®ï¼ 忢æ¶ä¿æå æ ä½ç½®åæ»å¨ç¶æã
æä»¶ç®¡çï¼
åºç¨æ¯æå¤æä»¶æ ç¾é¡µç®¡çï¼å¯ä»¥åæ¶æå¼å¤ä¸ª Markdown æä»¶ãå·¥ä½åºé¢æ¿ æ¾ç¤ºæä»¶æ ï¼æ¯ææä»¶å¤¹å±å¼/æå åæä»¶ææ½ãæä»¶å ³èåè½å 许åå» .md æä»¶ ç´æ¥å¨ milkup 䏿å¼ãæ¯æéè¿å½ä»¤è¡åæ°å¯å¨æ¶æå¼æå®æä»¶ã
èªå®ä¹åè®®ï¼
å®ç°äº milkup:// èªå®ä¹åè®®ç¨äºå è½½æ¬å°å¾çãåè®®æ ¼å¼ä¸º
milkup:///<base64-encoded-markdown-path>/<relative-image-path>ï¼
è§£å³äº Electron ä¸å è½½ç¸å¯¹è·¯å¾å¾ççå®å
¨éå¶é®é¢ã主è¿ç¨æ³¨ååè®®å¤çå¨ï¼
å°ç¸å¯¹è·¯å¾è§£æä¸ºç»å¯¹è·¯å¾å¹¶è¿åæä»¶å
容ã
主é¢ç³»ç»ï¼
æ¯æå¤ä¸»é¢åæ¢åèªå®ä¹ä¸»é¢ç¼è¾ãä¸»é¢æä»¶ä½¿ç¨ Less ç¼åï¼æ¯æåéååµå¥ã 主é¢ç¼è¾å¨æä¾å¯è§åçé¢ï¼å¯ä»¥å®æ¶é¢è§ä¸»é¢ææãæ¯æä¸»é¢å¯¼å ¥å¯¼åºï¼ æ¹ä¾¿å享åå¤ä»½ã
å½é 忝æï¼
ä½¿ç¨ vite-auto-i18n-plugin å®ç°èªå¨å½é åãæ¯æä¸æãè±æãæ¥æã驿ã ä¿æåæ³æãç¿»è¯æä»¶èªå¨çæï¼å¼åæ¶åªéç¼åä¸æææ¬ï¼æå»ºæ¶èªå¨ç¿»è¯ ä¸ºå ¶ä»è¯è¨ã
常ç¨å½ä»¤
å¯å¨å¼åæå¡å¨ï¼
pnpm run dev
æ¤å½ä»¤ä¼ä¾æ¬¡æ§è¡ï¼
- æå»ºé¢å è½½èæ¬ï¼esbuildï¼
- æå»ºä¸»è¿ç¨ä»£ç ï¼esbuildï¼
- å¯å¨ Vite å¼åæå¡å¨
- èªå¨å¯å¨ Electron åºç¨ï¼éè¿ vite-plugin-electronï¼
å¯å¨ Electron åºç¨ï¼
pnpm run start:electron
æ¤å½ä»¤ç¨äºåç¬å¯å¨ Electron åºç¨ï¼ä¸å¯å¨ Vite å¼åæå¡å¨ã
æå»ºä¸»è¿ç¨ï¼
pnpm run build:main
æå»ºé¢å è½½èæ¬ï¼
pnpm run build:preload
å®ç°æå
å¼åç¯å¢è®¾ç½®
ç¯å¢è¦æ±ï¼
å¼å milkup éè¦ä»¥ä¸ç¯å¢ï¼
- Node.js >= 20.17.0ï¼é¡¹ç®ä½¿ç¨ Node.js 20.18 çç¹æ§ï¼
- pnpm >= 10.0.0ï¼é¡¹ç®ä½¿ç¨ pnpm 10.12.1ï¼
- Gitï¼ç¨äºçæ¬æ§å¶ï¼
- æ¯æçæä½ç³»ç»ï¼WindowsãmacOS æ Linux
ä¾èµå®è£ ï¼
馿¬¡å
é项ç®åï¼æ§è¡ pnpm install å®è£
ææä¾èµã项ç®é
ç½®äº preinstall
é©åï¼ä¼æ£æ¥æ¯å¦ä½¿ç¨ pnpmï¼å¦æä½¿ç¨å
¶ä»å
管çå¨ä¼æ¥éãå®è£
è¿ç¨ä¸ä¼èªå¨
æ§è¡ simple-git-hooks ç prepare èæ¬ï¼å®è£
Git é©åã
å¼åæå¡å¨å¯å¨æµç¨ï¼
æ§è¡ pnpm run dev åç宿´æµç¨ï¼
- esbuild æå»ºé¢å è½½èæ¬ï¼src/preload.ts â dist-electron/preload.jsï¼
- esbuild æå»ºä¸»è¿ç¨ä»£ç ï¼src/main/index.ts â dist-electron/main/index.jsï¼
- Vite å¯å¨å¼åæå¡å¨ï¼çå¬ src/renderer ç®å½
- vite-plugin-electron èªå¨å¯å¨ Electron 主è¿ç¨
- 主è¿ç¨å建 BrowserWindowï¼å è½½ Vite å¼åæå¡å¨ç URL
- 渲æè¿ç¨å è½½ Vue åºç¨ï¼åå§å Milkdown ç¼è¾å¨
- å¼å模å¼ä¸èªå¨æå¼ DevTools
ç¯å¢åéï¼
å¼å模å¼ä¸ï¼vite-plugin-electron ä¼è®¾ç½® VITE_DEV_SERVER_URL ç¯å¢åéï¼
主è¿ç¨éè¿æ¤åé夿æ¯å¦ä¸ºå¼å模å¼ãå¼å模å¼ä¸å è½½ Vite å¼åæå¡å¨ç URLï¼
ç产模å¼ä¸å è½½æ¬å° HTML æä»¶ã
ç¼è¾å¨éæè¯¦è§£
Milkdown éæï¼
Milkdown æ¯åºäº ProseMirror çæä»¶å Markdown ç¼è¾å¨ã项ç®ä½¿ç¨ @milkdown/vue æä¾ç Vue ç»ä»¶éæãç¼è¾å¨é ç½®å æ¬ï¼
- @milkdown/preset-commonmark – CommonMark è§èæ¯æ
- @milkdown/preset-gfm – GitHub Flavored Markdown æ¯æ
- @milkdown/plugin-prism – 代ç åè¯æ³é«äº®
- @milkdown/plugin-diagram – Mermaid å¾è¡¨æ¯æ
- @milkdown/plugin-listener – ç¼è¾å¨äºä»¶çå¬
- @milkdown/plugin-automd – èªå¨ Markdown æ ¼å¼å
Milkdown ç¼è¾å¨ç»ä»¶ä½äº src/renderer/components/editor/MilkdownEditor.vueã ç¼è¾å¨å®ä¾éè¿ Vue ç provide/inject æºå¶å¨ç»ä»¶æ ä¸å ±äº«ï¼å è®¸å ¶ä»ç»ä»¶ 访é®ç¼è¾å¨ API è¿è¡å 容æä½ã
CodeMirror éæï¼
CodeMirror 6 ç¨äºæºç ç¼è¾æ¨¡å¼ãé ç½®å æ¬ï¼
- @codemirror/lang-markdown – Markdown è¯æ³æ¯æ
- @codemirror/autocomplete – èªå¨è¡¥å ¨
- @codemirror/commands – ç¼è¾å¨å½ä»¤
- codemirror-lang-mermaid – Mermaid è¯æ³æ¯æ
CodeMirror ç¼è¾å¨ç»ä»¶ä½äº src/renderer/components/editor/MarkdownSourceEditor.vueã ç¼è¾å¨ç¶æéè¿ @codemirror/state 管çï¼è§å¾éè¿ @codemirror/view 渲æã
ç¼è¾å¨æ¨¡å¼åæ¢ï¼
两ç§ç¼è¾å¨æ¨¡å¼å ±äº«åä¸ä»½ Markdown ææ¬æ°æ®ã忢æ¶ï¼å½åç¼è¾å¨çå 容 ä¼ä¿åå°å ±äº«ç¶æä¸ï¼ç¶åæ°ç¼è¾å¨ä»å ±äº«ç¶æå è½½å 容ã使ç¨é²ææºå¶é¿å é¢ç¹åæ¢å¯¼è´çæ§è½é®é¢ã
IPC é信模å¼
å®å ¨éä¿¡æ¶æï¼
milkup éµå¾ª Electron å®å ¨æä½³å®è·µã渲æè¿ç¨å¯ç¨ contextIsolationï¼ ç¦ç¨ nodeIntegrationãé¢å è½½èæ¬ä½¿ç¨ contextBridge.exposeInMainWorld æ´é²å®å ¨ç API ç»æ¸²æè¿ç¨ã渲æè¿ç¨éè¿ window.electronAPI 访é®ä¸»è¿ç¨åè½ã
IPC éä¿¡ç±»åï¼
项ç®ä½¿ç¨ä¸ç§ IPC é信模å¼ï¼
-
invoke/handle æ¨¡å¼ – ç¨äºè¯·æ±-ååºéä¿¡ãæ¸²æè¿ç¨è°ç¨ ipcRenderer.invokeï¼ ä¸»è¿ç¨éè¿ ipcMain.handle 注åå¤çå¨å¹¶è¿åç»æãéç¨äºæä»¶è¯»åã å¯¹è¯æ¡æ¾ç¤ºçéè¦è¿åå¼çæä½ã
-
send/on æ¨¡å¼ – ç¨äºååéä¿¡ãæ¸²æè¿ç¨è°ç¨ ipcRenderer.send åéæ¶æ¯ï¼ 主è¿ç¨éè¿ ipcMain.on çå¬ãéç¨äºéç¥ç±»æä½ï¼ä¸éè¦è¿åå¼ã
-
webContents.send æ¨¡å¼ – 主è¿ç¨ä¸»å¨å渲æè¿ç¨åéæ¶æ¯ãç¨äºæä»¶æå¼ã çªå£å ³é确认ç主è¿ç¨åèµ·çæä½ã
IPC å¤çå¨ç»ç»ï¼
主è¿ç¨ç IPC å¤çå¨å为ä¸ç±»ï¼ä½äº src/main/ipcBridge/ ç®å½ï¼
- å ¨å±å¤çå¨ – ä¸ä¾èµçªå£å®ä¾çå¤çå¨
- Handle å¤çå¨ – éè¦è¿åå¼ç请æ±-ååºå¤çå¨
- On å¤çå¨ – ååæ¶æ¯å¤çå¨
çéè½½æºå¶
渲æè¿ç¨çéè½½ï¼
Vite æä¾ç HMRï¼Hot Module Replacementï¼æ¯ææ¸²æè¿ç¨ççéè½½ã ä¿®æ¹ Vue ç»ä»¶ãæ ·å¼æä»¶æ TypeScript ä»£ç æ¶ï¼Vite ä¼éè¿ WebSocket æ¨éæ´æ°ï¼æµè§å¨ç«¯ç HMR 客æ·ç«¯æ¥æ¶æ´æ°å¹¶æ¿æ¢æ¨¡åï¼æ éå·æ°æ´ä¸ªé¡µé¢ã
Vue ç»ä»¶ççéè½½ç± @vitejs/plugin-vue å¤çï¼æ¯æä¿æç»ä»¶ç¶æã ä¿®æ¹ç»ä»¶æ¨¡æ¿æèæ¬æ¶ï¼åªéæ°æ¸²æåå½±åçç»ä»¶ï¼ä¿æåºç¨ç¶æä¸åã
主è¿ç¨çéè½½ï¼
vite-plugin-electron çå¬ä¸»è¿ç¨åé¢å è½½èæ¬çæä»¶ååãæ£æµå°ååæ¶ï¼ èªå¨éæ°æå»ºå¹¶éå¯ Electron è¿ç¨ãè¿ä¸ªè¿ç¨ä¼å ³éå½åçªå£å¹¶å建æ°çªå£ï¼ å æ¤ä¼ä¸¢å¤±åºç¨ç¶æã
为äºåå°ä¸»è¿ç¨éå¯çå½±åï¼å»ºè®®å°ä¸å¡é»è¾å°½éæ¾å¨æ¸²æè¿ç¨ï¼ä¸»è¿ç¨åª å¤çå¿ è¦çç³»ç»éæå IPC éä¿¡ã
è°è¯æå·§
渲æè¿ç¨è°è¯ï¼
å¼å模å¼ä¸ï¼åºç¨å¯å¨æ¶ä¼èªå¨æå¼ Chrome DevToolsãä¹å¯ä»¥éè¿å¿«æ·é® Ctrl+Shift+Iï¼macOS: Cmd+Option+Iï¼æå ¨å±å¿«æ·é® Ctrl+Shift+I æå¼ã
DevTools æä¾å®æ´çè°è¯åè½ï¼
- Console 颿¿ – æ¥çæ¥å¿è¾åºåæ§è¡ JavaScript 代ç
- Sources 颿¿ – 设置æç¹ã忥è°è¯ãæ¥çè°ç¨æ
- Elements 颿¿ – æ£æ¥ DOM ç»æåæ ·å¼
- Network 颿¿ – çæ§ç½ç»è¯·æ±ï¼è½ç¶æ¡é¢åºç¨è¾å°ä½¿ç¨ï¼
- Performance 颿¿ – æ§è½åæåç«ç°å¾
- Memory 颿¿ – å ååæåæ³æ¼æ£æµ
Vue DevTools éæï¼
å¯ä»¥å®è£ Vue DevTools æµè§å¨æ©å±çç¬ç«çæ¬ç¨äºè°è¯ Vue åºç¨ã å¨ DevTools ä¸å¯ä»¥æ¥çç»ä»¶æ ãç»ä»¶ç¶æãVuex/Pinia ç¶æãäºä»¶è¿½è¸ªçã
主è¿ç¨è°è¯ï¼
主è¿ç¨è¿è¡å¨ Node.js ç¯å¢ä¸ï¼å¯ä»¥ä½¿ç¨ Node.js è°è¯å¨ãæä¸¤ç§æ¹å¼ï¼
-
VS Code è°è¯é ç½® – å¨ .vscode/launch.json ä¸é ç½®è°è¯é ç½®ï¼ è®¾ç½® Electron 坿§è¡æä»¶è·¯å¾åå¯å¨åæ°ï¼å¯ä»¥å¨ VS Code ä¸ ç´æ¥è®¾ç½®æç¹è°è¯ä¸»è¿ç¨ä»£ç ã
-
è¿ç¨è°è¯ – ä½¿ç¨ –inspect æ –inspect-brk æ å¿å¯å¨ Electronï¼ ç¶åå¨ Chrome ä¸è®¿é® chrome://inspect è¿æ¥è°è¯å¨ã
æ¥å¿è¾åºçç¥ï¼
主è¿ç¨ç console.log è¾åºå°ç»ç«¯ï¼æ¸²æè¿ç¨ç console.log è¾åºå° DevToolsã
建议使ç¨ä¸åçæ¥å¿åç¼åºåä¸å模åï¼ä¾å¦ [main]ã[renderer]ã[ipc] çã
对äºå¤æçè°è¯åºæ¯ï¼å¯ä»¥ä½¿ç¨ electron-log åºç»ä¸ç®¡çæ¥å¿ï¼æ¯ææ¥å¿çº§å«ã æä»¶è¾åºåæ ¼å¼åã
Vue ç»ä»¶è°è¯ï¼
å¨ Vue ç»ä»¶ä¸å¯ä»¥ä½¿ç¨ä»¥ä¸æå·§ï¼
- 使ç¨
console.logå¨çå½å¨æé©åä¸è¾åºç¶æ - ä½¿ç¨ Vue DevTools æ¥çç»ä»¶ç propsãdata å computed
- 使ç¨
debuggerè¯å¥è®¾ç½®æç¹ - 使ç¨
watchEffect追踪ååºå¼æ°æ®åå
Milkdown è°è¯ï¼
Milkdown ç¼è¾å¨çè°è¯è¾ä¸ºå¤æï¼å 为æ¶å ProseMirror çå é¨ç¶æã å¯ä»¥éè¿ä»¥ä¸æ¹å¼è°è¯ï¼
- ä½¿ç¨ @milkdown/plugin-listener çå¬ç¼è¾å¨äºä»¶
- 访é®ç¼è¾å¨å®ä¾ç
ctx对象æ¥çæä»¶ç¶æ - ä½¿ç¨ ProseMirror DevTools æ¥çææ¡£ç»æåäºå¡
æ éææ¥
常è§å¼åé®é¢ï¼
端å£å ç¨ï¼
Vite é»è®¤ä½¿ç¨ 5173 端å£ãå¦æç«¯å£è¢«å ç¨ï¼Vite ä¼èªå¨å°è¯ä¸ä¸ä¸ªç«¯å£ã
æ£æ¥ç»ç«¯è¾åºç¡®è®¤å®é
使ç¨ç端å£å·ã妿éè¦åºå®ç«¯å£ï¼å¨ vite.config.mts
ä¸é
ç½® server.portã
ç½å±é®é¢ï¼ 妿åºç¨å¯å¨åæ¾ç¤ºç½å±ï¼æä»¥ä¸æ¥éª¤ææ¥ï¼
- æå¼ DevTools æ¥ç Console æ¯å¦æé误信æ¯
- æ£æ¥ Network 颿¿ç¡®è®¤èµæºæ¯å¦æ£ç¡®å è½½
- 确认é¢å è½½èæ¬è·¯å¾æ£ç¡®ï¼dist-electron/preload.jsï¼
- æ£æ¥ä¸»è¿ç¨ç»ç«¯è¾åºæ¯å¦æé误
- 确认 Vite å¼åæå¡å¨æ£å¸¸è¿è¡
çé载失æï¼ å¦æä¿®æ¹ä»£ç å页颿²¡ææ´æ°ï¼
- 确认 Vite å¼åæå¡å¨æ£å¸¸è¿è¡ï¼æ£æ¥ç»ç«¯æ¯å¦æé误
- æ£æ¥ä¿®æ¹çæä»¶æ¯å¦å¨ Vite çå¬çç®å½èå´å ï¼src/rendererï¼
- å°è¯æå¨å·æ°é¡µé¢ï¼Ctrl+R æ Cmd+Rï¼
- æ£æ¥æ¯å¦æè¯æ³éè¯¯å¯¼è´ HMR 失败
- éå¯å¼åæå¡å¨
IPC éä¿¡å¤±è´¥ï¼ å¦ææ¸²æè¿ç¨æ æ³è°ç¨ä¸»è¿ç¨åè½ï¼
- 确认é¢å è½½èæ¬æ£ç¡®æ´é²äº APIï¼ä½¿ç¨ contextBridgeï¼
- æ£æ¥ IPC ééåç§°æ¯å¦å¹é
- 确认主è¿ç¨å·²æ³¨å对åºçå¤çå¨
- æ£æ¥ contextIsolation æ¯å¦æ£ç¡®å¯ç¨
- å¨ DevTools Console 䏿£æ¥ window.electronAPI æ¯å¦åå¨
ç¼è¾å¨å è½½å¤±è´¥ï¼ å¦æ Milkdown æ CodeMirror ç¼è¾å¨æ æ³æ£å¸¸æ¾ç¤ºï¼
- æ£æ¥ç¼è¾å¨ç»ä»¶æ¯å¦æ£ç¡®æè½½
- 确认ç¼è¾å¨æ ·å¼æä»¶å·²æ£ç¡®å¯¼å ¥
- æ£æ¥ Console æ¯å¦ææä»¶å è½½é误
- 确认ç¼è¾å¨å®¹å¨å ç´ åå¨ä¸ææ£ç¡®ç尺寸
- æ£æ¥æ¯å¦æ CSS å²çªå½±åç¼è¾å¨æ ·å¼
æå»ºå¤±è´¥ï¼ 妿 esbuild æ Vite æå»ºå¤±è´¥ï¼
- æ£æ¥ TypeScript ç±»åé误
- 确认ææå¯¼å ¥è·¯å¾æ£ç¡®
- æ£æ¥æ¯å¦æå¾ªç¯ä¾èµ
- 确认 node_modules 宿´å®è£
- å°è¯å é¤ node_modules å pnpm-lock.yaml éæ°å®è£
主é¢ä¸çæï¼ 妿èªå®ä¹ä¸»é¢æ²¡æåºç¨ï¼
- æ£æ¥ä¸»é¢æä»¶è·¯å¾æ¯å¦æ£ç¡®
- 确认 Less æä»¶è¯æ³æ£ç¡®
- æ£æ¥ä¸»é¢å鿝妿£ç¡®è¦ç
- ç¡®è®¤ä¸»é¢æä»¶å·²å¨å ¥å£æä»¶ä¸å¯¼å ¥
- æ¸ é¤ç¼åå¹¶éæ°æå»º
å¼å工使µ
å ¸åå¼åæµç¨ï¼
-
å¯å¨å¼åç¯å¢
- æ§è¡
pnpm run devå¯å¨å¼åæå¡å¨ - çå¾ Electron åºç¨èªå¨å¯å¨
- 确认 DevTools å·²æå¼
- æ§è¡
-
åè½å¼å
- å¨ src/renderer ä¸ä¿®æ¹ Vue ç»ä»¶ææ·»å æ°ç»ä»¶
- ä¿åæä»¶åæ¥ç HMR èªå¨æ´æ°ææ
- ä½¿ç¨ DevTools è°è¯åéªè¯åè½
-
主è¿ç¨å¼å
- ä¿®æ¹ src/main ä¸ç主è¿ç¨ä»£ç
- ä¿ååçå¾ Electron èªå¨éå¯
- å¨ç»ç«¯æ¥ç主è¿ç¨æ¥å¿è¾åº
-
IPC éä¿¡å¼å
- å¨ src/main/ipcBridge 䏿·»å IPC å¤çå¨
- å¨ src/preload.ts 䏿´é² API
- 卿¸²æè¿ç¨ä¸éè¿ window.electronAPI è°ç¨
- ä½¿ç¨ TypeScript ç±»åç¡®ä¿ç±»åå®å ¨
-
æ ·å¼è°æ´
- ä¿®æ¹ Less æä»¶æç»ä»¶æ ·å¼
- ä½¿ç¨ DevTools Elements 颿¿å®æ¶è°è¯æ ·å¼
- ä¿å忥ç HMR æ´æ°ææ
-
ä»£ç æ£æ¥
- 宿æ§è¡
pnpm run lintæ£æ¥ä»£ç è´¨é - æ§è¡
pnpm run formatèªå¨æ ¼å¼å代ç - Git æäº¤åä¼èªå¨è¿è¡ lint-staged
- 宿æ§è¡
-
æµè¯éªè¯
- å¨å¼åç¯å¢ä¸æµè¯åè½
- æ§è¡
pnpm run buildæå»ºçäº§çæ¬ - æ§è¡
pnpm run start:electronæµè¯æå»ºäº§ç©
æä½³å®è·µï¼
- ä½¿ç¨ TypeScript ç±»åç³»ç»é¿å ç±»åé误
- éµå¾ª Vue 3 Composition API æä½³å®è·µ
- ä¿æç»ä»¶åä¸èè´£ï¼é¿å è¿å¤§çç»ä»¶
- ä½¿ç¨ Vue ç»åå¼å½æ°ï¼hooksï¼å¤ç¨é»è¾
- IPC é信使ç¨ç±»åå®å ¨çæ¥å£å®ä¹
- 主è¿ç¨ä»£ç ä¿æç®æ´ï¼ä¸å¡é»è¾æ¾å¨æ¸²æè¿ç¨
- 使ç¨è·¯å¾å«åç®åå¯¼å ¥è¯å¥
- 宿è¿è¡ä»£ç æ£æ¥åæ ¼å¼å
- æäº¤åç¡®ä¿ä»£ç éè¿ lint æ£æ¥
使ç¨ç¤ºä¾
å¯å¨å¼åç¯å¢
åºæ¬å¯å¨ï¼
# å®è£
ä¾èµï¼é¦æ¬¡æä¾èµæ´æ°åï¼
pnpm install
# å¯å¨å¼åæå¡å¨å Electron åºç¨
pnpm run dev
åºç¨ä¼èªå¨å¯å¨ï¼DevTools ä¼èªå¨æå¼ãç»ç«¯ä¼æ¾ç¤º Vite å¼åæå¡å¨çå°å åæå»ºä¿¡æ¯ã
åç¬æå»ºä¸»è¿ç¨ï¼
# åªæå»ºä¸»è¿ç¨ä»£ç
pnpm run build:main
# åªæå»ºé¢å è½½èæ¬
pnpm run build:preload
å¼åæ°åè½
æ·»å æ°ç Vue ç»ä»¶ï¼
# å¨ src/renderer/components ä¸å建æ°ç»ä»¶
# 使ç¨è·¯å¾å«å导å
¥
import MyComponent from '@renderer/components/MyComponent.vue'
æ·»å æ°ç IPC éä¿¡ï¼
// 1. å¨ src/main/ipcBridge 䏿·»å å¤çå¨
ipcMain.handle('my-channel', async (event, arg) => {
// å¤çé»è¾
return result
})
// 2. å¨ src/preload.ts 䏿´é² API
contextBridge.exposeInMainWorld('electronAPI', {
myFunction: (arg) => ipcRenderer.invoke('my-channel', arg)
})
// 3. 卿¸²æè¿ç¨ä¸è°ç¨
const result = await window.electronAPI.myFunction(arg)
è°è¯åºæ¯
è°è¯æ¸²æè¿ç¨ï¼
# å¯å¨å¼åç¯å¢
pnpm run dev
# DevTools ä¼èªå¨æå¼
# å¨ Sources 颿¿è®¾ç½®æç¹
# å¨ Console 颿¿æ§è¡ä»£ç
è°è¯ä¸»è¿ç¨ï¼
# æ¹å¼ 1: ä½¿ç¨ VS Code è°è¯é
ç½®
# å¨ .vscode/launch.json ä¸é
ç½®åï¼æ F5 å¯å¨è°è¯
# æ¹å¼ 2: ä½¿ç¨ --inspect æ å¿
# ä¿®æ¹ package.json ç dev èæ¬æ·»å --inspect
# ç¶åå¨ Chrome ä¸è®¿é® chrome://inspect
æµè¯æå»º
æå»ºå¹¶æµè¯ï¼
# 宿´æå»º
pnpm run build
# å¯å¨æå»ºåçåºç¨
pnpm run start:electron
è¿ä¼å è½½ dist ç®å½ä¸çæå»ºäº§ç©ï¼è䏿¯ Vite å¼åæå¡å¨ã ç¨äºéªè¯ç产æå»ºæ¯å¦æ£å¸¸å·¥ä½ã
é å使ç¨
- milkup-build – æå»ºçäº§çæ¬åæå åºç¨
- milkup-lint – 代ç è´¨éæ£æ¥åæ ¼å¼å
- milkup-release – çæ¬åå¸åæ´æ°æ¥å¿çæ
- moai-framework-electron – Electron å¼åæä½³å®è·µåé«çº§æ¨¡å¼
ææ¯èµæº
é ç½®æä»¶ï¼
- vite.config.mts – Vite å Electron æä»¶é ç½®
- tsconfig.json – TypeScript ç¼è¯é ç½®
- package.json – ä¾èµåèæ¬é ç½®
å ³é®æä»¶ï¼
- src/main/index.ts – 主è¿ç¨å ¥å£ï¼çªå£ç®¡çåçå½å¨æ
- src/preload.ts – é¢å è½½èæ¬ï¼IPC API æ´é²
- src/renderer/main.ts – 渲æè¿ç¨å ¥å£ï¼Vue åºç¨åå§å
- src/renderer/App.vue – æ ¹ç»ä»¶ï¼åºç¨å¸å±
ç¼è¾å¨ç»ä»¶ï¼
- src/renderer/components/editor/MilkdownEditor.vue – Milkdown ç¼è¾å¨
- src/renderer/components/editor/MarkdownSourceEditor.vue – CodeMirror ç¼è¾å¨
宿¹ææ¡£ï¼
- Electron ææ¡£: https://www.electronjs.org/docs
- Vue 3 ææ¡£: https://vuejs.org/
- Vite ææ¡£: https://vitejs.dev/
- Milkdown ææ¡£: https://milkdown.dev/
- CodeMirror ææ¡£: https://codemirror.net/
Version: 2.0.0 Last Updated: 2026-01-30 Changes: æ·»å 宿´çææ¯æ 说æãæ¶æè¯¦è§£ãå¼å工使µåè°è¯æå