How to make a simple static website using Svelte and Surge!

Hi everyone!

In this post, I will show you how you can deploy a static Svelte app to the web using Surge, and the best thing is that this is all free! :D

Ok, let's begin!


First, we will create a Svelte app. Type these shell commands to the terminal to create a Svelte app and run it in development mode:

# Make sure you have 'npm' and 'npx' installed!
npx degit sveltejs/template your_project_name
cd your_project_name

# Optional: Use TypeScript for your app
# node scripts/setupTypeScript.js

# Install all dependencies and run in development mode
npm install
npm run dev

To check if all things goes well, go to localhost:5000 on your browser, and you should see a big orange text Hello World!.

Now, we will install surge globally through npm (add sudo before npm if you have problems with permission!):

npm install -g surge

We will now edit the package.json file. If you use the TypeScript option, it should look like this (It may still look somewhat similar to this if you don't use it):

{
  "name": "svelte-app",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "build": "rollup -c",
    "dev": "rollup -c -w",
    "start": "sirv public --no-clear",
    "check": "svelte-check --tsconfig ./tsconfig.json"
  },
  "devDependencies": {
    "@rollup/plugin-commonjs": "^17.0.0",
    "@rollup/plugin-node-resolve": "^11.0.0",
    "rollup": "^2.3.4",
    "rollup-plugin-css-only": "^3.1.0",
    "rollup-plugin-livereload": "^2.0.0",
    "rollup-plugin-svelte": "^7.0.0",
    "rollup-plugin-terser": "^7.0.0",
    "svelte": "^3.0.0",
    "svelte-check": "^2.0.0",
    "svelte-preprocess": "^4.0.0",
    "@rollup/plugin-typescript": "^8.0.0",
    "typescript": "^4.0.0",
    "tslib": "^2.0.0",
    "@tsconfig/svelte": "^2.0.0"
  },
  "dependencies": {
    "sirv-cli": "^1.0.0"
  }
}

Here, in scripts part, we will add another command called deploy, this command will build our app, and then deploy it using surge:

  // Don't forget the comma! (unless if you put this at the last of the "scripts" 
  // part)
  "deploy": "rollup -c; surge public",

The command will build our app using rollup, then surge will deploy the public directory (contains static files like index.html) to its service for free.

One final thing to do is to add a CNAME file to public. This file simply contains the domain of our project. Enter this command to the terminal:

cd public; echo "hahaha.surge.sh" > CNAME

The command moves us to the public directory, then create a new file (if not exist) called CNAME, then in that file, we added our domain. In here I used hahaha.surge.sh, you can use any name you want under surge.sh subdomain, but make sure to check if the domain exists or not, if it doesn't (i.e. shows you a project not found 404 message), then it is OK to use. And you will need a domain provider to make a custom domain.

Now, when all things are done, cd to the root directory of your project, and run npm run deploy. This will take a while.

If you use surge for the first time, surge will ask you about your email and your password to create a new account or to login. It will also ask about the domain if you don't create the CNAME file.

When all things done, go to your domain (in this case it's hahaha.surge.sh), and you should see the same big text Hello world! that you see a few minutes ago.

End

So that's all for today! Thank you for reading the tutorial, I hope you enjoy it!

Btw, here are some links that will be helpful for you: