diff --git a/.changeset/busy-pumas-tap.md b/.changeset/busy-pumas-tap.md new file mode 100644 index 000000000000..7fde21f8f886 --- /dev/null +++ b/.changeset/busy-pumas-tap.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: ensure environment setup is in its own chunk diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 6d26c63c7c0d..68fc82769f22 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -682,9 +682,13 @@ async function kit({ svelte_config }) { config.build.rollupOptions.output = { ...config.build.rollupOptions.output, manualChunks(id, meta) { + // Prevent core runtime and env from ending up in a remote chunk, which could break because of initialization order if (id === `${runtime_directory}/app/server/index.js`) { return 'app-server'; } + if (id === `${runtime_directory}/shared-server.js`) { + return 'app-shared-server'; + } // Check if this is a *.remote.ts file if (svelte_config.kit.moduleExtensions.some((ext) => id.endsWith(`.remote${ext}`))) { diff --git a/packages/kit/test/apps/basics/src/routes/remote/+page.svelte b/packages/kit/test/apps/basics/src/routes/remote/+page.svelte index 9cc6a12475e3..830fbcaba337 100644 --- a/packages/kit/test/apps/basics/src/routes/remote/+page.svelte +++ b/packages/kit/test/apps/basics/src/routes/remote/+page.svelte @@ -9,11 +9,14 @@ set_count_server_set, resolve_deferreds } from './query-command.remote.js'; + import { q } from './accessing-env.remote'; let { data } = $props(); let command_result = $state(null); - let release; + + // we just want it not to be treeshaken away + q; const count = browser ? get_count() : null; // so that we get a remote request in the browser diff --git a/packages/kit/test/apps/basics/src/routes/remote/accessing-env.remote.js b/packages/kit/test/apps/basics/src/routes/remote/accessing-env.remote.js index 430d6f1af775..2d9795ed4356 100644 --- a/packages/kit/test/apps/basics/src/routes/remote/accessing-env.remote.js +++ b/packages/kit/test/apps/basics/src/routes/remote/accessing-env.remote.js @@ -1,8 +1,14 @@ +import { query } from '$app/server'; import { env } from '$env/dynamic/private'; import { env as public_env } from '$env/dynamic/public'; if (!env.PRIVATE_DYNAMIC || !public_env.PUBLIC_DYNAMIC) { // This checks that dynamic env vars are available when prerendering remote functions // https://github.com/sveltejs/kit/pull/14219 + // and are not in the same chunk as this one + // https://github.com/sveltejs/kit/issues/14439 throw new Error('Dynamic environment variables are not set up correctly'); } + +// placeholder query that needs to be imported/used elsewhere so that bundling/chunking would include env setup if not setup correctly +export const q = query(() => {});