diff --git a/src/electron.ts b/src/electron.ts index 39575aa..7e9719e 100644 --- a/src/electron.ts +++ b/src/electron.ts @@ -41,6 +41,11 @@ export function supportESM(): boolean { return parseInt(majorVer) >= 28 } +export function getElectronMajorVersion(): number { + const majorVer = getElectronMajorVer() + return parseInt(majorVer) +} + export function getElectronPath(): string { let electronExecPath = process.env.ELECTRON_EXEC_PATH || '' if (!electronExecPath) { diff --git a/src/plugins/esm.ts b/src/plugins/esm.ts index 88fa6de..d8e6592 100644 --- a/src/plugins/esm.ts +++ b/src/plugins/esm.ts @@ -8,9 +8,11 @@ import MagicString from 'magic-string' import type { SourceMapInput } from 'rollup' import type { Plugin } from 'vite' +import { getElectronMajorVersion } from '../electron' + const CJSyntaxRe = /__filename|__dirname|require\(|require\.resolve\(/ -const CJSShim = ` +const CJSShim_normal = ` // -- CommonJS Shims -- import __cjs_url__ from 'node:url'; import __cjs_path__ from 'node:path'; @@ -20,6 +22,14 @@ const __dirname = __cjs_path__.dirname(__filename); const require = __cjs_mod__.createRequire(import.meta.url); ` +const CJSShim_node_20_11 = ` +// -- CommonJS Shims -- +import __cjs_mod__ from 'node:module'; +const __filename = import.meta.filename; +const __dirname = import.meta.dirname; +const require = __cjs_mod__.createRequire(import.meta.url); +` + const ESMStaticImportRe = /(?<=\s|^|;)import\s*([\s"']*(?[\p{L}\p{M}\w\t\n\r $*,/{}@.]+)from\s*)?["']\s*(?(?<="\s*)[^"]*[^\s"](?=\s*")|(?<='\s*)[^']*[^\s'](?=\s*'))\s*["'][\s;]*/gmu @@ -37,6 +47,9 @@ function findStaticImports(code: string): StaticImport[] { export default function esmShimPlugin(): Plugin { let sourcemap: boolean | 'inline' | 'hidden' = false + + const CJSShim = getElectronMajorVersion() >= 30 ? CJSShim_node_20_11 : CJSShim_normal + return { name: 'vite:esm-shim', apply: 'build',