From e351f89843ea4e10a66e2e8eeaaa6db94cd1515c Mon Sep 17 00:00:00 2001 From: Bohan Jiang <52446949+Bohan-J@users.noreply.github.com> Date: Mon, 25 May 2026 20:14:50 +0800 Subject: [PATCH] fix(desktop): declare phantom deps + dedupe react-query in renderer (MUL-2651) (#3232) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Packaged renderer was bundling two copies of @tanstack/react-query because apps/desktop imported it without declaring the dep, so Node resolution fell through to the hoisted root variant (react@19.2.0, pulled in by apps/mobile), while packages/core resolved to the catalog variant (react@19.2.3). Two physical paths → two QueryClientContexts → "No QueryClient set" white screen on launch. - Declare @tanstack/react-query, lucide-react, zustand as direct deps via catalog: so apps/desktop resolves to the same peer variant as packages/core/views. - Add @tanstack/react-query to renderer dedupe as a defense-in-depth bound against future peer drift. Verified: realpaths under apps/desktop, packages/core, packages/views all point to @tanstack+react-query@5.96.2_react@19.2.3; production renderer bundle now contains exactly one "use QueryClientProvider to set one" string (was 2) and no useQueryClient\$1 suffix. Co-authored-by: multica-agent --- apps/desktop/electron.vite.config.ts | 2 +- apps/desktop/package.json | 5 ++++- pnpm-lock.yaml | 23 ++++++++++++++++------- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/apps/desktop/electron.vite.config.ts b/apps/desktop/electron.vite.config.ts index 431a93be6..49202691a 100644 --- a/apps/desktop/electron.vite.config.ts +++ b/apps/desktop/electron.vite.config.ts @@ -23,7 +23,7 @@ export default defineConfig({ alias: { "@": resolve("src/renderer/src"), }, - dedupe: ["react", "react-dom"], + dedupe: ["react", "react-dom", "@tanstack/react-query"], }, }, }); diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 2be7267a3..43f883ff1 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -45,12 +45,15 @@ "@multica/core": "workspace:*", "@multica/ui": "workspace:*", "@multica/views": "workspace:*", + "@tanstack/react-query": "catalog:", "electron-updater": "^6.8.3", "fix-path": "^5.0.0", + "lucide-react": "catalog:", "react-router-dom": "^7.6.0", "shadcn": "^4.1.0", "sonner": "^2.0.7", - "tw-animate-css": "^1.4.0" + "tw-animate-css": "^1.4.0", + "zustand": "catalog:" }, "devDependencies": { "@electron-toolkit/tsconfig": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 66175e91f..8c0273a2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -175,12 +175,18 @@ importers: '@multica/views': specifier: workspace:* version: link:../../packages/views + '@tanstack/react-query': + specifier: 'catalog:' + version: 5.96.2(react@19.2.3) electron-updater: specifier: ^6.8.3 version: 6.8.3 fix-path: specifier: ^5.0.0 version: 5.0.0 + lucide-react: + specifier: 'catalog:' + version: 1.0.1(react@19.2.3) react-router-dom: specifier: ^7.6.0 version: 7.14.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -193,6 +199,9 @@ importers: tw-animate-css: specifier: ^1.4.0 version: 1.4.0 + zustand: + specifier: 'catalog:' + version: 5.0.12(@types/react@19.2.14)(immer@11.1.4)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) devDependencies: '@electron-toolkit/tsconfig': specifier: ^2.0.0 @@ -395,7 +404,7 @@ importers: version: 55.0.15(expo@55.0.24)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-router: specifier: ~55.0.14 - version: 55.0.14(fb4q2ydjsib3h2ixce2lptexem) + version: 55.0.14(28857138dad78e037ca803b5df54c4f8) expo-secure-store: specifier: ~55.0.13 version: 55.0.14(expo@55.0.24) @@ -11751,7 +11760,7 @@ snapshots: ws: 8.20.1 zod: 3.25.76 optionalDependencies: - expo-router: 55.0.14(fb4q2ydjsib3h2ixce2lptexem) + expo-router: 55.0.14(28857138dad78e037ca803b5df54c4f8) react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - '@expo/dom-webview' @@ -11827,7 +11836,7 @@ snapshots: ws: 8.20.1 zod: 3.25.76 optionalDependencies: - expo-router: 55.0.14(sz7ge56yy7giy7pypish4aerfa) + expo-router: 55.0.14(8e96a26c61ba5d82f3cb5fb823dc6716) react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - '@expo/dom-webview' @@ -12098,7 +12107,7 @@ snapshots: react: 19.2.0 optionalDependencies: '@expo/metro-runtime': 55.0.11(@expo/dom-webview@55.0.6)(expo@55.0.24)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-router: 55.0.14(fb4q2ydjsib3h2ixce2lptexem) + expo-router: 55.0.14(28857138dad78e037ca803b5df54c4f8) react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: - supports-color @@ -12113,7 +12122,7 @@ snapshots: react: 19.2.0 optionalDependencies: '@expo/metro-runtime': 55.0.11(@expo/dom-webview@55.0.6)(expo@55.0.24)(react-dom@19.2.3(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-router: 55.0.14(sz7ge56yy7giy7pypish4aerfa) + expo-router: 55.0.14(8e96a26c61ba5d82f3cb5fb823dc6716) react-dom: 19.2.3(react@19.2.0) transitivePeerDependencies: - supports-color @@ -17151,7 +17160,7 @@ snapshots: optionalDependencies: react-native-worklets: 0.7.4(@babel/core@7.29.0)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-router@55.0.14(fb4q2ydjsib3h2ixce2lptexem): + expo-router@55.0.14(28857138dad78e037ca803b5df54c4f8): dependencies: '@expo/log-box': 55.0.12(@expo/dom-webview@55.0.6)(expo@55.0.24)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@expo/metro-runtime': 55.0.11(@expo/dom-webview@55.0.6)(expo@55.0.24)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) @@ -17199,7 +17208,7 @@ snapshots: - expo-font - supports-color - expo-router@55.0.14(sz7ge56yy7giy7pypish4aerfa): + expo-router@55.0.14(8e96a26c61ba5d82f3cb5fb823dc6716): dependencies: '@expo/log-box': 55.0.12(@expo/dom-webview@55.0.6)(expo@55.0.24)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@expo/metro-runtime': 55.0.11(@expo/dom-webview@55.0.6)(expo@55.0.24)(react-dom@19.2.3(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)