From 41c4139611ff4847af7cb6246b514c3ebaa4ab87 Mon Sep 17 00:00:00 2001 From: Ruben Carvalho Date: Mon, 11 May 2026 14:53:36 +0200 Subject: [PATCH 1/2] fix(build): replace process.env.NODE_ENV at esbuild time Adds process.env.NODE_ENV to the esbuild define config so built .js and .dev.js files never contain raw process.env references. This fixes ReferenceError: process is not defined for downstream consumers that load SWC packages in a browser without a bundler (e.g. Sass playground), while keeping dev/prod behaviour correct in built output. --- 1st-gen/scripts/ts-tools.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/1st-gen/scripts/ts-tools.js b/1st-gen/scripts/ts-tools.js index bb968b9853d..c86a27c8795 100644 --- a/1st-gen/scripts/ts-tools.js +++ b/1st-gen/scripts/ts-tools.js @@ -83,7 +83,10 @@ export const buildPackage = async (paths) => { build({ ...config, entryPoints: devPaths, - define: { 'window.__swc.DEBUG': 'true' }, + define: { + 'window.__swc.DEBUG': 'true', + 'process.env.NODE_ENV': '"development"', + }, outExtension: { '.js': '.dev.js' }, plugins: devPlugins, }).catch(() => process.exit(1)) @@ -91,7 +94,10 @@ export const buildPackage = async (paths) => { } const prodConfig = { ...config, - define: { 'window.__swc.DEBUG': 'false' }, + define: { + 'window.__swc.DEBUG': 'false', + 'process.env.NODE_ENV': '"production"', + }, plugins: paths.length === 1 ? [] : prodPlugins, }; if (prodPath.length) { From 89e88beb0c022bb946cd3a45416efa54e6122a09 Mon Sep 17 00:00:00 2001 From: Ruben Carvalho Date: Mon, 11 May 2026 19:35:19 +0200 Subject: [PATCH 2/2] fix(2nd-gen): replace process.env.NODE_ENV in Vite library builds Vite's library mode does not auto-replace process.env.NODE_ENV, so 2nd-gen dist files contained raw process.env.NODE_ENV references. This caused ReferenceError: process is not defined for downstream consumers that load SWC packages in a browser without a bundler (e.g. Sass playground). Adds a mode-aware define so dist files contain the literal mode value ('production' or 'development') instead of the runtime expression. --- 2nd-gen/packages/core/vite.config.js | 9 +++++++-- 2nd-gen/packages/swc/vite.config.ts | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/2nd-gen/packages/core/vite.config.js b/2nd-gen/packages/core/vite.config.js index f91fd99b164..9e08614ceda 100644 --- a/2nd-gen/packages/core/vite.config.js +++ b/2nd-gen/packages/core/vite.config.js @@ -86,7 +86,12 @@ function getEntries() { return entries; } -export default defineConfig({ +export default defineConfig(({ mode }) => ({ + define: { + 'process.env.NODE_ENV': JSON.stringify( + mode === 'development' ? 'development' : 'production' + ), + }, plugins: [ dts({ include: ['**/*.ts'], @@ -125,4 +130,4 @@ export default defineConfig({ esbuild: { target: 'es2018', }, -}); +})); diff --git a/2nd-gen/packages/swc/vite.config.ts b/2nd-gen/packages/swc/vite.config.ts index fd0ad4ba2c2..94e0d57d423 100644 --- a/2nd-gen/packages/swc/vite.config.ts +++ b/2nd-gen/packages/swc/vite.config.ts @@ -60,7 +60,12 @@ function processStylesheets(): Plugin { }; } -export default defineConfig({ +export default defineConfig(({ mode }) => ({ + define: { + 'process.env.NODE_ENV': JSON.stringify( + mode === 'development' ? 'development' : 'production' + ), + }, plugins: [ litCss({ exclude: ['./stylesheets/**/*.css'] }), processStylesheets(), @@ -147,4 +152,4 @@ export default defineConfig({ esbuild: { target: 'es2018', }, -}); +}));