Svelte TypeScript Tailwind Setup
TL;DR
For the very impatient among us:
npx degit munxar/svelte-template my-svelte-project
cd my-svelte-project
npm i
npm run dev
Enjoy!
Overview
In this article I'll give you some insights how I set up Svelte with TypeScript and style components with Tailwind. There are plenty of articles around, but I found a lot of them overcomplicate things, or don't fit my requirements.
So here are my goals for the setup:
- stay as close to the default template as possible, to make updates easy
- production build should only generate css that is used
- use typescript wherever possible
What Do I Need?
You'll need at least some node version with npm on your machine. At time of writing I have node version 15.6.0 and npm version 7.4.0 installed on my machine.
node -v && npm -v
v15.6.0
7.4.0
Install the Svelte Default Template
To setup Svelte I open a terminal and use the command from the official Svelte homepage. TypeScript support has been already added to this template, so nothing special here.
npx degit sveltejs/template my-svelte-project
# or download and extract
cd my-svelte-project
Enable TypeScript
# enable typescript support
node scripts/setupTypeScript.js
At this point I try out if the setup works by installing all dependencies and start the development server.
# install npm dependencies
npm i
# run dev server
npm run dev
If everything worked so far, pointing my browser at http://localhost:5000 displays a friendly HELLO WORLD. Let's stop the development server by hitting ctrl-c
in the terminal.
Install Tailwind
Back in the Terminal I add Tailwind as described in their documentation.
npm install -D tailwindcss@latest postcss@latest
After this step I generate a default tailwind.config.js file with
npx tailwindcss init
If you prefer a full Tailwind config use the --full argument:
npm tailwindcss init --full
See the Tailwind documentation for more infos about this topic.
Configure Rollup to use Postcss
The default Svelte template uses Rollup as a bundler. When I run the setupTypeScript.js from the first setup step, I get the famous svelte-preprocess plugin already integrated into the rollup setup. The only thing left is that I add the config for postcss as options to the svelte-preprocess plugin. Here are the changes that I make in rollup.config.js:
// rollup.config.js (partial)
...
export default {
...
plugins: [
svelte({
preprocess: sveltePreprocess({
postcss: {
plugins: [require("tailwindcss")],
},
}),
}),
...
],
...
};
At this point Rollup should trigger postcss and therefore the Tailwind plugin. To enable it in my application, I still need one important step.
Adding a Tailwind Component to the App
Now it's time to create a Svelte component that contains the postcss to generate all the classes. I call mine Tailwind.svelte but the name doesn't really matter.
// src/Tailwind.svelte
<style global lang="postcss">
@tailwind base;
@tailwind components;
@tailwind utilities;
</style>
Some things to note here:
- The component only has a single style element with no markup.
- The attribute global tells the svelte-preprocess plugin to not scope the css to this component. Remember by default Svelte scopes every css to the component it was declared, in this case I don't want this.
- The lang="postcss" attribute is telling svelte-preprocess to use postcss for the content. As a goody, some IDE extensions now display the content with the correct syntax highlighting for postcss.
Now use the Tailwind component in src/App.svelte
// src/App.svelte
<script lang="ts">
import Tailwind from "./Tailwind.svelte";
</script>
<Tailwind />
<div class="bg-gray-200 px-4 py-2 rounded">Hello Tailwind!</div>
Now my browser displays a Tailwind styled div. Very nice!
Let's clean up the public/i
Truncated by Planet PHP, read more at the original (another 5726 bytes)