kit icon indicating copy to clipboard operation
kit copied to clipboard

Error building with @sveltejs/adapter-static after upgrading SvelteKit

Open RiwEZ opened this issue 3 years ago • 2 comments

Describe the bug

I'm upgrading my SvelteKit version from "1.0.0-next.324" to "1.1.0" and I've already fixed everything to work on the dev server, but when I try to build with @sveltejs/adapter-static the error on the log came.

Reproduction

Try run npm run build on https://github.com/RiwEZ/TanatBlog on dev branch

Logs

.svelte-kit/output/server/chunks/index.js                                         4.34 kB
.svelte-kit/output/server/internal.js                                             4.43 kB
.svelte-kit/output/server/index.js                                               78.65 kB
file:///D:/Projects/blog/client/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:260
                                enqueue(decoded, decodeURI(pathname), pathname);
                                                 ^

URIError: URI malformed
    at decodeURI (<anonymous>)
    at visit (file:///D:/Projects/blog/client/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:260:22)

Node.js v19.4.0
[vite-plugin-sveltekit-compile] Prerendering failed with code 1
error during build:
Error: Prerendering failed with code 1
    at ChildProcess.<anonymous> (file:///D:/Projects/blog/client/node_modules/@sveltejs/kit/src/exports/vite/index.js:599:15)
    at ChildProcess.emit (node:events:513:28)
    at ChildProcess._handle.onexit (node:internal/child_process:293:12)

System Info

System:
    OS: Windows 10 10.0.19045
    CPU: (16) x64 AMD Ryzen 9 5900HX with Radeon Graphics
    Memory: 21.28 GB / 31.86 GB
  Binaries:
    Node: 19.4.0 - C:\Program Files\nodejs\node.EXE
    npm: 9.2.0 - C:\Program Files\nodejs\npm.CMD
  Browsers:
    Edge: Spartan (44.19041.1266.0), Chromium (108.0.1462.76)
    Internet Explorer: 11.0.19041.1566
  npmPackages:
    @sveltejs/adapter-auto: ^1.0.0 => 1.0.0
    @sveltejs/adapter-node: ^1.1.1 => 1.1.1
    @sveltejs/adapter-static: next => 1.0.2
    @sveltejs/kit: next => 1.1.0
    svelte: ^3.44.0 => 3.55.1

Severity

blocking an upgrade

Additional Information

This broke when I try to migrate to a newer version of SvelteKit.

RiwEZ avatar Jan 14 '23 12:01 RiwEZ

As instructed in the issue template:

Reproductions must be short, self-contained and correct and must not contain files or code that aren't relevant to the issue — please do NOT just paste a link to your project.

Conduitry avatar Jan 14 '23 13:01 Conduitry

So, I can't find a way to exactly reproduce the error I found. But I found something similar (maybe it's expected behavior, I don't know)

  1. Create a folder [slug].json and +server.ts that will serve a GET that read some file like this
import type { RequestHandler } from './$types';
import { readFileSync } from 'fs';

const PATH = './src/data';
export const GET: RequestHandler = async ({ params }) => {
  const data = readFileSync(`${PATH}/${params.slug}.txt`, 'utf-8');
  return new Response(JSON.stringify({ data }));
};
  1. Create a folder [slug] that will contain
<!-- +page.svelte -->
<script lang="ts"> 
    import type { PageData } from './$types';
    export let data: PageData;

    let t = data.text;
</script>
<div>{t}</div>
// +page.ts (if I use +page.server.ts, it'll also make the same error)
import type { PageLoad } from './$types';
import { base } from '$app/paths';

export const load: PageLoad = async ({ params, fetch }) => {
  const fetchURL = `${base}/${params.slug}.json`;
  const res = await fetch(fetchURL);
  const res_data = (await res.json());

  return { text: res_data.data };
};
  1. Use @sveltejs/adapter-static and on +layout.server.ts add export const pretender = true to prerender everything.

If we try to use npm run build (vite build) it gives this error (npm run dev doesn't have any problems)

.svelte-kit/output/server/chunks/index.js                               3.29 kB
.svelte-kit/output/server/internal.js                                   3.81 kB
.svelte-kit/output/server/index.js                                     78.65 kB
file:///D:/Projects/blog/static_bug/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:394
                throw new Error(
                      ^

Error: The following routes were marked as prerenderable, but were not prerendered because they were not found while crawling your app:
  - /[slug]

See https://kit.svelte.dev/docs/page-options#prerender-troubleshooting for info on how to solve this
    at prerender (file:///D:/Projects/blog/static_bug/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:394:9)
    at async file:///D:/Projects/blog/static_bug/node_modules/@sveltejs/kit/src/core/postbuild/index.js:89:25

Node.js v19.4.0
[vite-plugin-sveltekit-compile] Prerendering failed with code 1
error during build:
Error: Prerendering failed with code 1
    at ChildProcess.<anonymous> (file:///D:/Projects/blog/static_bug/node_modules/@sveltejs/kit/src/exports/vite/index.js:599:15)
    at ChildProcess.emit (node:events:513:28)
    at ChildProcess._handle.onexit (node:internal/child_process:293:12)

RiwEZ avatar Jan 17 '23 05:01 RiwEZ

This is expected behaviour. The error tells you what happened — the route was not found while crawling your app. You need to link to any pages that you want to prerender, or put them in config.kit.prerender.entries

Rich-Harris avatar Jan 28 '23 17:01 Rich-Harris