Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert change to render fallback when prerendering is disabled #4604

Merged
merged 6 commits into from Apr 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/red-adults-wonder.md
@@ -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
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
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
@@ -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
@@ -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
@@ -0,0 +1 @@
throw new Error('this file should not be loaded if prerendering is disabled');
@@ -0,0 +1 @@
<h1>not prerendered</h1>
27 changes: 27 additions & 0 deletions packages/kit/test/prerendering/disabled/svelte.config.js
@@ -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.