Features:
<style lang="scss">
)See this running on Heroku: https://svelte-ssr-test.herokuapp.com/
(it's a free dyno, it may be asleep)
I was looking for an SSR example for Svelte but the only one I could find seemed unnecessarily complicated. So I decided to create this example which I think is more educational.
I'm a Rollup and Svelte noob. Don't hesitate to open an issue if I did something wrong.
Run npm run rollup-watch
and then npm run server-watch
on another shell. Not very elegant but still better than manually doing npm run start
whenever you want to refresh a change, is it not?
If you add a new file to components/pages
you will need to restart Rollup's watch. I haven't found a way of making Rollup react to new files. If you know how please answer this StackOverflow question!
Instead of having two terminal tabs you could create a new NPM command on package.json
like this:
"dev": "npm run rollup-watch & npm run scss-watch & npm run server-watch"
This would run those commands at the same time in parallel (note the single &
) but all outputs will be mixed. Also, this doesn't work on Windows.
Sapper apps respond the first request by doing SSR but after that it becomes a single-page-application (SPA) with code splitting. This is fancy but introduces a number of issues:
You will need to feed both server and client with data so you have no choice than to create an API. With a purely SSR'd app you may not need to do that since you can query the DB and simply return HTML.
HTTP requests have to work in both Node and the browser. This shouldn't be a problem for public endpoints but it will be challenging if your API uses cookies or JWT for authentication.
After the initial request Sapper apps become a SPA. This introduces a number of issues typical of SPAs. Eg: forms are not filled when going back.
(If someone from the Sapper team reads this: It would be great if Sapper had a purely SSR mode wink wink)