zero-runtime css-in-ts์ธ vanilla-extract๋ ๋ฐํ์์ ์คํ๋๋ css-in-js ๋ฐฉ์( styled-components, emotion )๊ณผ ๋ฌ๋ฆฌ ๋น๋ํ์์ ์คํ๋์ด Next.js์ SSR์์ Hydration์ ๊ฑฐ์น๊ธฐ ์ ์๋ ์คํ์ผ์ํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
TailwindCSS ์ญ์ ๋น๋ ํ์์ ์คํ์ผ์ํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ง๋ง ๊ฐ๋ ์ฑ์ด ์ข์ง ์์ ์๋กญ๊ฒ ์์ํ๊ฒ ๋ ํ๋ก์ ํธ์ vanilla-extract๋ฅผ ๋์ ํ๊ธฐ๋ก ํ์๋ค.
1. vanilla-extract ์ค์น
// npm
npm install @vanilla-extract/css
npm install --save-dev @vanilla-extract/next-plugin
// pnpm
pnpm add @vanilla-extract/css
pnpm add --save-dev @vanilla-extract/next-plugin
// yarn
yarn add @vanilla-extract/css
yarn add -D @vanilla-extract/next-plugin
2. next.config.mjs ์์
๊ณต์ ๋ฌธ์์๋ next.config.js ์ธ ๊ฒฝ์ฐ๋ก๋ง ์์ฑ๋์ด ์๋ค.
.mjs ํ์ฅ์์ ํ์ผ์์๋ require ๋ฌธ๋ฒ์ ์ง์ํ์ง ์์ผ๋ฏ๋ก ์๋์ ๊ฐ์ด ์์ฑํด์ค์ผ ํ๋ค.
/** @type {import('next').NextConfig} */
import { createVanillaExtractPlugin } from "@vanilla-extract/next-plugin";
const withVanillaExtract = createVanillaExtractPlugin();
const nextConfig = {};
export default withVanillaExtract(nextConfig);
3. styles.css.ts ์์ฑ
import { style } from "@vanilla-extract/css";
export const container = style({
padding: 10,
color: "red",
});
import { container } from "./styles.css";
export default function Home() {
return <div className={container}>hello</div>;
}
vanilla-extract ์ ๋ณต ๊ฐ๋ณด์๊ณ ... ๐
์ฐธ๊ณ
https://ui.toast.com/weekly-pick/ko_20190805
https://velog.io/@shinhw371/CSS-why-Nextjs-recommand-Tailwind