Skip to content

sveltekit

intro

We will focus here on Svelte usage for static websites (JAMstack arch), as opposed to Server-Side Rendering (SSR, check Svelte docs)

install

nodeenv

First install nodeenv in python virtualenv, then install a specific node version

$ virtualenv nodeenv
$ cd nodeenv
$ source bin/activate
(nodeenv) $ pip3 install nodeenv
(nodeenv) $ nodeenv --version
(nodeenv) $ noveenv --list
(nodeenv) $ nodeenv --node=18.4.0 --jobs=4 node_18_4_0
(nodeenv) $ deactivate
$ cd node_18_4_0
$ source bin/activate
(node_18_4_0) $ node -v
(node_18_4_0) $ deactivate_node

sveltekit

(node_...)$ npm init svelte project
(node_...)$ cd project
(node_...)$ npm install
(node_...)$ npm @sveltejs/adapter-static    // for SSG-only mode
(node_...)$ npm run dev

config

/svelte.config.js

/svelte.config.js
import adapter from '@sveltejs/adapter-static';
import preprocess from 'svelte-preprocess';

/** @type {import('@sveltejs/kit').Config} */
const config = {
    // Consult https://github.com/sveltejs/svelte-preprocess
    // for more information about preprocessors
    preprocess: preprocess(),

    kit: {
        adapter: adapter(),
        paths: { base: '/subroute' } // remove this live if base is '/'
    }
};

export default config

/src/hooks.js

Set SSR off

/src/hooks.js
/** @type {import ('@sveltejs/kit').Handle} */
export async function handle({event, resolve}) {
    const response = await resolve(event, { ssr: false });
    return response
}

usage

/src/app.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <link rel="icon" href="%svelte.assets%/favicon.png" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        %svelte.head%
    </head>
    <body>
        <div>%svelte.body%</div>
    </body>
</html>

tips

REST routes

Create directories/file structure, /src/item/[id]/show.svelte or /src/company/[name]/year/[year].svelte

<script>
import {page} from '$app/stores'
<script>

Item id: {$page.params.id}