From 1969d81b32b06bee1d8123e83a1fad5b15b022ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20M=C3=A5rtensson?= Date: Mon, 20 Oct 2025 11:11:41 +0200 Subject: [PATCH] fix(nextjs): handle webpack detection when using rspack --- packages/nextjs/src/config/util.ts | 5 +++++ packages/nextjs/test/config/util.test.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/packages/nextjs/src/config/util.ts b/packages/nextjs/src/config/util.ts index 8d2d7781230b..6fd017f08844 100644 --- a/packages/nextjs/src/config/util.ts +++ b/packages/nextjs/src/config/util.ts @@ -163,6 +163,11 @@ export function detectActiveBundler(nextJsVersion: string | undefined): 'turbopa return 'webpack'; } + // Explicit opt-in to webpack (using rspack) via environment variable + if (process.env.NEXT_RSPACK === 'true') { + return 'webpack'; + } + // Fallback to version-based default behavior if (nextJsVersion) { const turbopackIsDefault = isTurbopackDefaultForVersion(nextJsVersion); diff --git a/packages/nextjs/test/config/util.test.ts b/packages/nextjs/test/config/util.test.ts index 55fd13cf5dc4..1e95c98ee9af 100644 --- a/packages/nextjs/test/config/util.test.ts +++ b/packages/nextjs/test/config/util.test.ts @@ -332,6 +332,7 @@ describe('util', () => { process.argv = [...originalArgv]; process.env = { ...originalEnv }; delete process.env.TURBOPACK; + delete process.env.NEXT_RSPACK; }); afterEach(() => { @@ -349,6 +350,11 @@ describe('util', () => { expect(util.detectActiveBundler('16.0.0')).toBe('webpack'); }); + it('returns webpack when NEXT_RSPACK env var is set', () => { + process.env.NEXT_RSPACK = 'true'; + expect(util.detectActiveBundler('16.0.0')).toBe('webpack'); + }); + it('returns turbopack for Next.js 16+ by default', () => { expect(util.detectActiveBundler('16.0.0')).toBe('turbopack'); expect(util.detectActiveBundler('17.0.0')).toBe('turbopack'); @@ -388,5 +394,11 @@ describe('util', () => { process.argv.push('--webpack'); expect(util.detectActiveBundler('15.5.0')).toBe('turbopack'); }); + + it('prioritizes TURBOPACK env var over NEXT_RSPACK env var', () => { + process.env.TURBOPACK = '1'; + process.env.NEXT_RSPACK = 'true'; + expect(util.detectActiveBundler('15.5.0')).toBe('turbopack'); + }); }); });