From be8b099c121cf70cc92b0e534b5a6df77f93d3f9 Mon Sep 17 00:00:00 2001 From: Naiyuan Qing <145280634+NevilleQingNY@users.noreply.github.com> Date: Mon, 13 Apr 2026 18:27:43 +0800 Subject: [PATCH] feat(desktop): add remote API proxy mode for dev Co-Authored-By: Claude Opus 4.6 --- apps/desktop/electron.vite.config.ts | 49 +++++++++++++++++---------- apps/desktop/package.json | 1 + apps/desktop/src/renderer/src/App.tsx | 6 ++-- package.json | 1 + 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/apps/desktop/electron.vite.config.ts b/apps/desktop/electron.vite.config.ts index 2c3d00a88..350708fb1 100644 --- a/apps/desktop/electron.vite.config.ts +++ b/apps/desktop/electron.vite.config.ts @@ -1,26 +1,41 @@ import { resolve } from "path"; import { defineConfig, externalizeDepsPlugin } from "electron-vite"; +import { loadEnv } from "vite"; import react from "@vitejs/plugin-react"; import tailwindcss from "@tailwindcss/vite"; -export default defineConfig({ - main: { - plugins: [externalizeDepsPlugin()], - }, - preload: { - plugins: [externalizeDepsPlugin()], - }, - renderer: { - server: { - port: 5173, - strictPort: true, +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd(), ""); + const remoteApi = env.VITE_REMOTE_API; + const remoteWs = remoteApi?.replace(/^https/, "wss").replace(/^http/, "ws"); + + return { + main: { + plugins: [externalizeDepsPlugin()], }, - plugins: [react(), tailwindcss()], - resolve: { - alias: { - "@": resolve("src/renderer/src"), + preload: { + plugins: [externalizeDepsPlugin()], + }, + renderer: { + server: { + port: 5173, + strictPort: true, + ...(remoteApi && { + proxy: { + "/api": { target: remoteApi, changeOrigin: true }, + "/auth": { target: remoteApi, changeOrigin: true }, + "/uploads": { target: remoteApi, changeOrigin: true }, + "/ws": { target: remoteWs, changeOrigin: true, ws: true }, + }, + }), + }, + plugins: [react(), tailwindcss()], + resolve: { + alias: { + "@": resolve("src/renderer/src"), + }, + dedupe: ["react", "react-dom"], }, - dedupe: ["react", "react-dom"], }, - }, + }; }); diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 788e95d38..63f66dd7d 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -5,6 +5,7 @@ "main": "./out/main/index.js", "scripts": { "dev": "electron-vite dev", + "dev:remote": "electron-vite dev --mode remote", "build": "electron-vite build", "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", diff --git a/apps/desktop/src/renderer/src/App.tsx b/apps/desktop/src/renderer/src/App.tsx index d8fa988a6..23bdd0fb8 100644 --- a/apps/desktop/src/renderer/src/App.tsx +++ b/apps/desktop/src/renderer/src/App.tsx @@ -39,12 +39,14 @@ function AppContent() { return ; } +const remoteProxy = Boolean(import.meta.env.VITE_REMOTE_API); + export default function App() { return ( diff --git a/package.json b/package.json index 3b6e4272e..e8aaa1338 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "dev:web": "turbo dev --filter=@multica/web", "dev:desktop": "turbo dev --filter=@multica/desktop", + "dev:desktop:remote": "pnpm --filter @multica/desktop dev:remote", "build": "turbo build", "typecheck": "turbo typecheck", "test": "turbo test",