Skip to content

Commit e030bd0

Browse files
authored
Fix .svelte files in node_modules with Cloudflare prerenderEnvironment: node (#16210)
* fix(cloudflare,svelte): resolve .svelte files in node_modules with prerenderEnvironment: 'node' Packages that ship .svelte files (e.g. bits-ui) failed with 'Unknown file extension .svelte' when using the Cloudflare adapter with prerenderEnvironment: 'node'. Two issues caused this: 1. The cf-externals plugin set top-level ssr.noExternal = true, which caused vitefu's crawlFrameworkPkgs to return an empty noExternal list (it assumed everything was already noExternal). This only applied to the ssr environment in Vite 6, leaving the prerender environment without the needed noExternal entries. 2. The createNodePrerenderPlugin disabled dep optimization entirely for the prerender environment (noDiscovery: true, include: []). The fix removes ssr.noExternal = true from cf-externals, removes the dep optimization override, and has @astrojs/svelte use crawlFrameworkPkgs to discover svelte packages and add them to resolve.noExternal for all server environments via configEnvironment. * add changeset * fix: use fileURLToPath for cross-platform root path * test: add response body to assertion error for CI debugging * fix: rename fake-svelte-pkg/dist to src to avoid .gitignore exclusion
1 parent b5c2fba commit e030bd0

14 files changed

Lines changed: 448 additions & 16 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@astrojs/cloudflare': patch
3+
'@astrojs/svelte': patch
4+
---
5+
6+
Fixes `.svelte` files in `node_modules` failing with `Unknown file extension ".svelte"` when using the Cloudflare adapter with `prerenderEnvironment: 'node'`

‎packages/integrations/cloudflare/src/index.ts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,6 @@ export default function createIntegration({
310310
if (conf.ssr) {
311311
// Cloudflare does not support externalizing modules in server environments
312312
conf.ssr.external = undefined;
313-
conf.ssr.noExternal = true;
314313
}
315314
},
316315
},

‎packages/integrations/cloudflare/src/vite-plugin-dev-server-prerender-middleware.ts‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,6 @@ export function createNodePrerenderPlugin(): vite.Plugin {
1818
};
1919
},
2020

21-
// Disable dep optimization for the `prerender` environment so dependencies
22-
// are loaded via native import() with correct import.meta.url semantics.
23-
configEnvironment(environmentName) {
24-
if (environmentName === 'prerender') {
25-
return { optimizeDeps: { noDiscovery: true, include: [] } };
26-
}
27-
},
28-
2921
configureServer(server) {
3022
(server as any)[devPrerenderMiddlewareSymbol] = true;
3123
},
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
import { defineConfig } from 'astro/config';
2+
import svelte from '@astrojs/svelte';
23

3-
export default defineConfig({});
4+
export default defineConfig({
5+
integrations: [svelte()],
6+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "fake-svelte-pkg",
3+
"version": "1.0.0",
4+
"type": "module",
5+
"exports": {
6+
".": "./src/index.js"
7+
},
8+
"peerDependencies": {
9+
"svelte": "^5.0.0"
10+
}
11+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>Hello from fake svelte component</p>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as FakeComponent } from './FakeComponent.svelte';

‎packages/integrations/cloudflare/test/fixtures/prerender-node-env/package.json‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
"private": true,
55
"dependencies": {
66
"@astrojs/cloudflare": "workspace:*",
7-
"astro": "workspace:*"
7+
"@astrojs/svelte": "workspace:*",
8+
"astro": "workspace:*",
9+
"svelte": "^5.0.0",
10+
"fake-svelte-pkg": "file:./fake-svelte-pkg"
811
}
912
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
import { FakeComponent } from 'fake-svelte-pkg';
3+
</script>
4+
5+
<div id="svelte-wrapper">
6+
<FakeComponent />
7+
</div>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
export const prerender = true;
3+
4+
import SvelteWrapper from '../components/SvelteWrapper.svelte';
5+
---
6+
7+
<html lang="en">
8+
<head>
9+
<meta charset="utf-8" />
10+
<title>Svelte Prerender Test</title>
11+
</head>
12+
<body>
13+
<SvelteWrapper />
14+
</body>
15+
</html>

0 commit comments

Comments
 (0)