Skip to content

Commit

Permalink
Revert change to render fallback when prerendering is disabled (#4604)
Browse files Browse the repository at this point in the history
* Revert #4443: Create fallback HTML file when prerendering is disabled

Fixes #4492

* Document `config.kit.prerender.entries: []` workaround for SPA mode

* add test

* tweak changeset

* lockfile

* Update packages/adapter-static/README.md

Co-authored-by: Rich Harris <hello@rich-harris.dev>
  • Loading branch information
dimfeld and Rich-Harris authored Apr 13, 2022
1 parent 68f3650 commit 21d20c3
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 17 deletions.
5 changes: 5 additions & 0 deletions .changeset/red-adults-wonder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/kit': patch
---

Only render fallback when prerendering is enabled
2 changes: 2 additions & 0 deletions packages/adapter-static/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ export default {

When operating in SPA mode, you can omit `config.kit.prerender.default` (or set it to `false`, its default value), and only pages that have the [`prerender`](https://kit.svelte.dev/docs/page-options#prerender) option set will be prerendered at build time.

SvelteKit will still crawl your app's entry points looking for prerenderable pages. If `svelte-kit build` fails because of pages that can't be loaded outside the browser, you can set `config.kit.prerender.entries` to `[]` to prevent this from happening. (Setting `config.kit.prerender.enabled` also has this effect, but would prevent the fallback page from being generated.)

> ⚠️ During development, SvelteKit will still attempt to server-side render your routes. This means accessing things that are only available in the browser (such as the `window` object) will result in errors, even though this would be valid in the output app. To align the behavior of SvelteKit's dev mode with your SPA, you can [call `resolve()` with a parameter of `{ssr: false}` inside the `handle()` hook](https://kit.svelte.dev/docs/hooks#handle).
## GitHub Pages
Expand Down
34 changes: 17 additions & 17 deletions packages/kit/src/core/build/prerender/prerender.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ export async function prerender({ config, entries, files, log }) {
paths: []
};

if (!config.kit.prerender.enabled) {
return prerendered;
}

installFetch();

const server_root = join(config.kit.outDir, 'output');
Expand All @@ -71,23 +75,6 @@ export async function prerender({ config, entries, files, log }) {

const server = new Server(manifest);

const rendered = await server.respond(new Request('http://sveltekit-prerender/[fallback]'), {
getClientAddress,
prerender: {
fallback: true,
default: false,
dependencies: new Map()
}
});

const file = `${config.kit.outDir}/output/prerendered/fallback.html`;
mkdirp(dirname(file));
writeFileSync(file, await rendered.text());

if (!config.kit.prerender.enabled) {
return prerendered;
}

const error = normalise_error_handler(log, config.kit.prerender.onError);

const q = queue(config.kit.prerender.concurrency);
Expand Down Expand Up @@ -281,6 +268,19 @@ export async function prerender({ config, entries, files, log }) {
await q.done();
}

const rendered = await server.respond(new Request('http://sveltekit-prerender/[fallback]'), {
getClientAddress,
prerender: {
fallback: true,
default: false,
dependencies: new Map()
}
});

const file = `${config.kit.outDir}/output/prerendered/fallback.html`;
mkdirp(dirname(file));
writeFileSync(file, await rendered.text());

return prerendered;
}

Expand Down
20 changes: 20 additions & 0 deletions packages/kit/test/prerendering/disabled/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "prerendering-test-basics",
"private": true,
"version": "0.0.2-next.0",
"scripts": {
"dev": "node ../../cli.js dev",
"build": "node ../../cli.js build",
"preview": "node ../../cli.js preview",
"check": "tsc && svelte-check",
"test": "npm run build"
},
"devDependencies": {
"@sveltejs/kit": "workspace:*",
"svelte": "^3.43.0",
"svelte-check": "^2.5.0",
"typescript": "~4.6.2",
"uvu": "^0.5.2"
},
"type": "module"
}
11 changes: 11 additions & 0 deletions packages/kit/test/prerendering/disabled/src/app.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
%svelte.head%
</head>
<body>
%svelte.body%
</body>
</html>
1 change: 1 addition & 0 deletions packages/kit/test/prerendering/disabled/src/hooks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
throw new Error('this file should not be loaded if prerendering is disabled');
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<h1>not prerendered</h1>
27 changes: 27 additions & 0 deletions packages/kit/test/prerendering/disabled/svelte.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import path from 'path';
import adapter from '../../../../adapter-static/index.js';

/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter(),

prerender: {
enabled: false
},

vite: {
build: {
minify: false
},
clearScreen: false,
server: {
fs: {
allow: [path.resolve('../../../src')]
}
}
}
}
};

export default config;
14 changes: 14 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 21d20c3

Please sign in to comment.