From 61b53b2a1344fcb18f6c26a60dead2c32399a37c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 9 Jul 2025 16:24:10 -0400 Subject: [PATCH 1/3] fix: force `$app/*` modules to be bundled --- .changeset/flat-eggs-start.md | 5 +++++ packages/kit/src/exports/vite/index.js | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/flat-eggs-start.md diff --git a/.changeset/flat-eggs-start.md b/.changeset/flat-eggs-start.md new file mode 100644 index 000000000000..8910073f66ae --- /dev/null +++ b/.changeset/flat-eggs-start.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: force `$app/*` modules to be bundled diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 4b332a6de07c..92a0d949a2e1 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -297,7 +297,11 @@ async function kit({ svelte_config }) { // that bundle later on from resolving the export conditions incorrectly // and for example include browser-only code in the server output // because they for example use esbuild.build with `platform: 'browser'` - 'esm-env' + 'esm-env', + // This forces `$app/*` modules to be bundled, since they depend on + // virtual modules like `__sveltekit/paths` + // TODO use RegExp.escape once we drop Node <22 + new RegExp(runtime_directory.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&')) ] } }; From 81e4e3f31bd1cd7b234c1a1639ce93acdac39de9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 9 Jul 2025 16:29:44 -0400 Subject: [PATCH 2/3] use a string --- packages/kit/src/exports/vite/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 92a0d949a2e1..44cd6d7a2786 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -299,9 +299,10 @@ async function kit({ svelte_config }) { // because they for example use esbuild.build with `platform: 'browser'` 'esm-env', // This forces `$app/*` modules to be bundled, since they depend on - // virtual modules like `__sveltekit/paths` - // TODO use RegExp.escape once we drop Node <22 - new RegExp(runtime_directory.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&')) + // virtual modules like `__sveltekit/paths` (this isn't a valid bare + // import, but it works with vite-node's externalization logic, which + // uses basic concatenation + '@sveltejs/kit/src/runtime' ] } }; From dd5f2c18a99e3d0b0e29a9f9dc294dbad70ff896 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 9 Jul 2025 16:30:05 -0400 Subject: [PATCH 3/3] OCD --- packages/kit/src/exports/vite/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 44cd6d7a2786..934a2beaa045 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -301,7 +301,7 @@ async function kit({ svelte_config }) { // This forces `$app/*` modules to be bundled, since they depend on // virtual modules like `__sveltekit/paths` (this isn't a valid bare // import, but it works with vite-node's externalization logic, which - // uses basic concatenation + // uses basic concatenation) '@sveltejs/kit/src/runtime' ] }