kit: hooks.js example causes a build error
Describe the bug
When the following hooks.js
file exists, npm run build
throws an error. (However npm run dev
works without error and the site runs perfectly.)
To Reproduce
- Add
src/hooks.js
export async function handle(request, render) {
const response = await render(request);
return {
...response,
headers: {
...response.headers,
'x-custom-header': 'potato'
}
};
}
- Run
npm run build
.
The command will throw this error:
✓ 38 modules transformed.
.svelte/output/server/app.js 193.07kb
.svelte/output/server/style.css 7.76kb
Run npm start to try your app locally.
> Using @sveltejs/adapter-node
TypeError: Cannot read property 'headers' of undefined
at Object.handle (file:///Users/me/sveltekit-demo/.svelte/output/server/app.js:1890:19)
at async ssr (file:///Users/me/sveltekit-demo/.svelte/output/server/app.js:1677:12)
at async visit (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:531:20)
at async prerender (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:682:5)
at async Builder.prerender (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:743:4)
at async adapt (/Users/me/sveltekit-demo/node_modules/@sveltejs/adapter-node/index.js:26:4)
at async adapt (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:765:2)
at async file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/cli.js:598:5
> 500 /about
Error: 500 /about
at error (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:523:11)
at visit (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:574:5)
at async prerender (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:682:5)
at async Builder.prerender (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:743:4)
at async adapt (/Users/me/sveltekit-demo/node_modules/@sveltejs/adapter-node/index.js:26:4)
at async adapt (file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/chunks/index5.js:765:2)
at async file:///Users/me/sveltekit-demo/node_modules/@sveltejs/kit/dist/cli.js:598:5
npm ERR! code 1
npm ERR! path /Users/me/sveltekit-demo
npm ERR! command failed
npm ERR! command sh -c svelte-kit build
about.svelte
is nothing special:
<h1>About this site</h1>
<p>TODO...</p>
svelte.config.cjs
contains adapter as: adapter: node(),
.
Information about your SvelteKit Installation:
System:
OS: macOS 11.2.2
CPU: (8) arm64 Apple M1
Shell: 5.8 - /bin/zsh
npmPackages:
@sveltejs/kit: next => 1.0.0-next.64
svelte: ^3.35.0 => 3.35.0
Severity
Minor
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 1
- Comments: 20 (8 by maintainers)
Commits related to this issue
- add prerendering to $app/env (#763) — committed to sveltejs/kit by Rich-Harris 3 years ago
- Add `prerendering` to `$app/env` (#833) * add prerendering to $app/env (#763) * add docs — committed to sveltejs/kit by deleted user 3 years ago
In the process of trying to figure out how we’d tackle this, I ended up writing the code, so I took the liberty of opening a PR: https://github.com/sveltejs/kit/pull/833
config.kit.ssr has been removed — use the handle hook instead: https://kit.svelte.dev/docs#hooks-handle. how can i resolve this issue
Ah, yep, this makes sense. In the
prerender
step, nothing gets returned fromrender
for non-prerenderable pages. Not 100% sure what the right move is here — it’s easy enough to just add anif (response)
block but it feels a bit leaky since something is always returned normally. It could return a 404 response but that doesn’t feel totally correct either. Hmm…