SvelteKit ํ๋ก์ ํธ์ Tailwind CSS๋ฅผ ์ค์ ํ๋ ๊ฐ์ฅ ๊น๋ํ๊ณ ๊ณต์์ ์ธ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์ต์ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ์ผ๋ฉฐ, ์ค์ ์ฝ๋์ ์ค์ ์์๋ฅผ ํฌํจํ์ต๋๋ค.
โ 01. SvelteKit ํ๋ก์ ํธ ์์ฑ
SvelteKit ํ๋ก์ ํธ๊ฐ ์์ง ์๋ค๋ฉด, ์๋ ๋ช
๋ น์ด๋ก ์๋ก ๋ง๋ค์ด ์ฃผ์ธ์.
๊ณต์ ๋ฌธ์์์๋ ์๋ดํ๋ ๊ฐ์ฅ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค:
npx sv create my-project
cd my-project
โ 02. Tailwind CSS ์ค์น
Tailwind CSS์ ๊ด๋ จ๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํฉ๋๋ค.
npm install tailwindcss @tailwindcss/vite
โ 03. Vite ์ค์ ํ์ผ ์์
vite.config.ts
๋๋ vite.config.js
์ Tailwind ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํฉ๋๋ค:
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
plugins: [
tailwindcss(),
sveltekit(),
],
});
โ 04. Tailwind CSS import ํ์ผ ์์ฑ
src/app.css
ํ์ผ์ ๋ง๋ค๊ณ ๋ค์์ ์ถ๊ฐํ์ธ์:
@import "tailwindcss";
์ด ํ์ผ์ Tailwind์ ๊ธฐ๋ณธ ์คํ์ผ, ์ปดํฌ๋ํธ, ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ํฌํจํ๋ ํต์ฌ ํ์ผ์ ๋๋ค.
โ 05. CSS๋ฅผ SvelteKit ๋ ์ด์์์ import
SvelteKit์ ๊ธฐ๋ณธ์ ์ผ๋ก src/routes/+layout.svelte
์์ ์ ์ญ CSS๋ฅผ ๋ก๋ํฉ๋๋ค.
ํ์ผ์ ์์ฑํ๊ณ ์๋์ฒ๋ผ ์์ฑํ์ธ์:
<script>
import "../app.css";
</script>
<slot />
+layout.svelte
๋ ๋ชจ๋ ํ์ด์ง์ ๊ณตํต ์ ์ฉ๋๋ ์ ์ญ UI ๋ฐ CSS๋ฅผ ๋ด๋นํฉ๋๋ค.
โ 06. ๊ฐ๋ฐ ์๋ฒ ์คํ
์ค์ ์ด ๋๋ฌ๋ค๋ฉด, ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํด์ Tailwind๊ฐ ์ ์๋ํ๋์ง ํ์ธํฉ๋๋ค:
npm run dev
๋ธ๋ผ์ฐ์ ์์ http://localhost:5173
์ ์ด์ด ํ์ธํ์ธ์.
โ 07. Tailwind CSS ์ฌ์ฉ ์์
์ด์ Tailwind ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ๋ง์๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค!
์: +page.svelte
<h1 class="text-3xl font-bold underline">
Hello world!
</h1>
<style lang="postcss">
@reference "tailwindcss";
:global(html) {
background-color: theme(--color-gray-100);
}
</style>
class="text-3xl font-bold"
: Tailwind์ ํ ์คํธ ํฌ๊ธฐ์ ๊ตต๊ธฐ ์ค์ <style lang="postcss">
: Tailwind์์ ์คํ์ผ์ ์ฒ๋ฆฌํ ์ ์๋๋ก PostCSS ์ฌ์ฉ@reference
์theme()
ํจ์: Tailwind ๋ณ์ ์ฌ์ฉ
๐ง ๋ง๋ฌด๋ฆฌ ์ ๋ฆฌ
ํญ๋ชฉ | ์ค๋ช |
---|---|
์ค์ ๋ฐฉ์ | ๊ณต์ ๋ฌธ์ ๊ธฐ๋ฐ์ Vite ํ๋ฌ๊ทธ์ธ ํตํฉ ๋ฐฉ์ |
์คํ์ผ ์ ์ฉ | HTML ํด๋์ค ๊ธฐ๋ฐ ์ ํธ๋ฆฌํฐ ๋ฐฉ์ |
ํ์ฅ์ฑ | PostCSS, JIT ๋ชจ๋, ํ ๋ง ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅ |
๊ธฐํ | ๋ชจ๋ ์ค์ ์ ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅ, ์ค์ ํ์ผ๋ก ์กฐ์ ๊ฐ๋ฅ |
๐ ๋ค์ ๊ธ ์๊ณ
- ๋คํฌ ๋ชจ๋ ๋ฐ ์ฌ์ฉ์ ํ ๋ง ์ ์ฉํ๊ธฐ
- daisyUI, Flowbite ๋ฑ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๊ธฐ
- SvelteKit + Tailwind๋ก ํฌํธํด๋ฆฌ์ค ์ฌ์ดํธ ๋ง๋ค๊ธฐ
์ํ ํ๋ก์ ํธ zip ํ์ผ์ ๋ง๋ค์์ต๋๋ค. ์๋ ๋งํฌ์์ ๋ค์ด๋ก๋ํ์ค ์ ์์ด์:
์ด ํ๋ก์ ํธ์๋ ๋ค์์ด ํฌํจ๋์ด ์์ต๋๋ค:
vite.config.js
์์@tailwindcss/vite
ํ๋ฌ๊ทธ์ธ ์ค์ src/app.css
์ Tailwind import+layout.svelte
์์ CSS ์ ์ญ import+page.svelte
์ Tailwind ์ ํธ๋ฆฌํฐ ํด๋์ค ๋ฐ PostCSS ์์ ํฌํจ
โก Vite๋?
Vite๋ ์ฐจ์ธ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๋น๋ ๋๊ตฌ์
๋๋ค.
Vue.js์ ์ฐฝ์์ Evan You๊ฐ ๋ง๋ค์์ผ๋ฉฐ, ํ์ฌ๋ React, Svelte, Preact ๋ฑ ๋ค์ํ ํ๋ ์์ํฌ์์ ํญ๋๊ฒ ์ฌ์ฉ๋๊ณ ์์ด์.
๐ก ํ ์ค ์์ฝ
Vite๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์๋ฒ์ ์ต์ ํ๋ ํ๋ก๋์ ๋น๋๋ฅผ ์ ๊ณตํ๋ ๋ชจ๋ ๋น๋ ๋๊ตฌ์ ๋๋ค.
๐ง Vite์ ์ฃผ์ ํน์ง
ํน์ง | ์ค๋ช |
---|---|
โก ๋น ๋ฅธ ๊ฐ๋ฐ ์๋ฒ | ๋ชจ๋ ๋จ์๋ก ์์ฒญ์ ์ฒ๋ฆฌํด์ ์ฆ์ ๋ฐ์๋จ (Hot Module Replacement) |
๐งฑ ๋ชจ๋ ๊ธฐ๋ฐ | ES ๋ชจ๋(ESM)์ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ๋ชจ๋ ๋ถ๋ฌ์ด |
๐ ๏ธ ๋น๋ ๋๊ตฌ ํตํฉ | Rollup์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํด์ ์ต์ ํ๋ ํ๋ก๋์ ๋น๋ ์ ๊ณต |
๐ ํ๋ฌ๊ทธ์ธ ์์คํ | ๋ค์ํ Vite ํ๋ฌ๊ทธ์ธ๊ณผ ํตํฉ ๊ฐ๋ฅ (์: Tailwind, React, Svelte ๋ฑ) |
๐ฆ ๊ฒฝ๋ ์ค์ | vite.config.js ๋๋ vite.config.ts ๋ก ๊ฐ๋จํ๊ฒ ์ค์ ๊ฐ๋ฅ |
๐งช Vite์ SvelteKit์ ๊ด๊ณ
- SvelteKit๋ ๋ด๋ถ์ ์ผ๋ก Vite๋ฅผ ๋น๋ ๋๊ตฌ๋ก ์ฌ์ฉํฉ๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์์ฑํ
vite.config.js
๋ SvelteKit์ ๋์ ๋ฐฉ์์ด๋ ํ๋ฌ๊ทธ์ธ์ ์ปค์คํฐ๋ง์ด์งํ ๋ ์ฐ์ ๋๋ค.
์:
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
plugins: [
tailwindcss(), // Tailwind ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก
sveltekit(), // SvelteKit ์ฌ์ฉ ์ ์ธ
],
});
๐งฉ Vite๋ก ๊ฐ๋ฅํ ์ผ
์์ | ๋ช ๋ น์ด |
---|---|
๊ฐ๋ฐ ์๋ฒ ์คํ | npm run dev |
๋น๋ | npm run build |
๋น๋ ๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ | npm run preview |
ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ | vite-plugin-xxx ํํ๋ก ์ค์น ๊ฐ๋ฅ |
๐ vite.config.js ์์น์ ์ญํ
- ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ์กด์ฌ (
vite.config.js
๋๋vite.config.ts
) - ์ฃผ์ ์ญํ :
- ํ๋ฌ๊ทธ์ธ ์ค์
- ๋ณ์นญ(alias) ์ ์
- ๋น๋ ๊ฒฝ๋ก ์ค์
- ๊ฐ๋ฐ ์๋ฒ ์ต์ ์ค์
โ ๋ง๋ฌด๋ฆฌ ์ ๋ฆฌ
ํญ๋ชฉ | ์ค๋ช |
---|---|
Vite | ๋น ๋ฅธ ๊ฐ๋ฐ ์๋ฒ + Rollup ๊ธฐ๋ฐ ๋น๋ ๋๊ตฌ |
SvelteKit | ๋ด๋ถ์ ์ผ๋ก Vite๋ฅผ ์ฌ์ฉํจ |
Tailwind ํตํฉ | Vite ํ๋ฌ๊ทธ์ธ์ ํตํด ์ฝ๊ฒ ์ค์ ๊ฐ๋ฅ |
์ค์ ํ์ผ | vite.config.js ์์ ํ๋ฌ๊ทธ์ธ ๋ฐ ์ค์ ์กฐ์ |