From 2338d7c44b0ffc8fa148d893d4c174f6d43a7fd7 Mon Sep 17 00:00:00 2001 From: David Kaya Date: Wed, 25 Mar 2026 20:03:57 +0100 Subject: [PATCH] fix: resolve Prism CJS loading crash in Vite dev mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the prismSetup module that imported prismjs directly — it caused Vite to pre-bundle prismjs into a separate chunk from @lexical/code-prism, breaking the CJS require chain. Language components tried to call Prism.languages.extend() before the base grammars were available, crashing the app. Instead, add optimizeDeps.include for prismjs and @lexical/code-prism so Vite pre-bundles them together, preserving the correct CJS evaluation order within a single chunk. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- electron.vite.config.ts | 6 ++++++ src/renderer/lib/prismSetup.ts | 15 --------------- src/renderer/main.tsx | 1 - 3 files changed, 6 insertions(+), 16 deletions(-) delete mode 100644 src/renderer/lib/prismSetup.ts diff --git a/electron.vite.config.ts b/electron.vite.config.ts index d1303ea..0657da2 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -33,6 +33,12 @@ export default defineConfig({ build: { outDir: 'dist/renderer', }, + optimizeDeps: { + // @lexical/code-prism depends on prismjs + its language components via + // CJS require(). Vite must pre-bundle them together so that the Prism + // global is available when component IIFEs execute. + include: ['prismjs', '@lexical/code-prism'], + }, plugins: [react(), tailwindcss()], resolve: { alias: { diff --git a/src/renderer/lib/prismSetup.ts b/src/renderer/lib/prismSetup.ts deleted file mode 100644 index 4823780..0000000 --- a/src/renderer/lib/prismSetup.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Ensures the PrismJS global is available before @lexical/code-prism - * captures its tokenizer reference. - * - * @lexical/code-prism reads `globalThis.Prism` at module-evaluation time. - * In Vite dev mode the esbuild CJS shim may not have set the global yet, - * so we force it here. This module must be imported before any module - * that transitively loads @lexical/code-prism. - */ -import Prism from 'prismjs'; - -if (typeof globalThis !== 'undefined' && !globalThis.Prism) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (globalThis as any).Prism = Prism; -} diff --git a/src/renderer/main.tsx b/src/renderer/main.tsx index 4591098..cc67373 100644 --- a/src/renderer/main.tsx +++ b/src/renderer/main.tsx @@ -1,7 +1,6 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; -import '@renderer/lib/prismSetup'; import App from '@renderer/App'; import '@renderer/styles.css';