app라우터에서 pandacss를 바로?
이전 글에서는 왜 build time css - in -js 가 하입을 받고 있는지를 간단히 다루어보았는데요
이번에는 build type css - in js 프레임워크 중 하나인 panda css의 세팅을 해보도록 하겠습니다.
panda css는 next.js , remix , gatby , nuxt , preact , solid.js 등
너무나도 다양한 프레임워크들을 지원해주며 그 방법 또한 공식문서에서 잘 가르쳐주고 있습니다.
심지어는 app router와의 통합 과정도 너무 잘 가르쳐주고 있는데요
공식문서를 잘 따라서 설치해보고 조금 문제가 생길 수 있는 부분들은 간단하게 고쳐보면서
panda css를 잘 세팅해보도록 하겠습니다.
npx create-next-app@latest --use-npm
create nexet app을 수행해줍니다.
pnpm, yarn 등 원하는 패키지매니저를 사용하셔도 좋습니다.
✔ What is your project named? … test-app
✔ Would you like to use TypeScript with this project? … Yes
✔ Would you like to use ESLint with this project? … Yes
✔ Would you like to use Tailwind CSS with this project? … No
✔ Would you like to use `src/` directory with this project? … Yes
✔ Use App Router (recommended)? … Yes
✔ Would you like to customize the default import alias? … No
맨 위의 what is your project named에는 생성하고자 하는 폴더이름을 넣어줍니다.
그 이외에는 원하는대로 설정해주면 되는데 pandacssd에서 권장하는 방법은 다음과 같습니다.
이를 그대로 따르셔도 좋지만 저는 src 디렉토리는 없었으면 좋겠으니 그부분을 바꿔주고
import alias를 하는 부분도 제 취향에 맞게 @/* 로 커스터마이징 해주었습니다.
cd test-app
cd 명령어를 통해 생성된 폴더에 진입합니다.
이제부터 pandacss를 본격적으로 설치해보겠습니다.
npm install -D @pandacss/dev
npx panda init --postcss
빌드 타임에 모든 css가 완성되기때문에 dev 종속성으로 설치해주도록 합니다.
npx panda init --postcss 명령어를 통해 이니셜라이제이션을 해줘요
{
"scripts": {
+ "prepare": "panda codegen",
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
}
package.json의 scripts 부분에 preapre 명령어를 다음과 같이 추가해줍니다.
추가를 완료했다면 npm run preapare 를 한번 시도해보셔도 좋고 안해보셔도 좋습니다.
이제 루트폴더에 생성된 panda.config.ts 파일을 확인하겠습니다.
pandacss의 이니셜라이제이션은 우리가 src 디렉토리를 사용할 것이라는 가정하에 생성되었기 때문에
이부분에서 살짝 바꾸어주어야하는 부분이 있습니다.
import { defineConfig } from "@pandacss/dev"
export default defineConfig({
// Whether to use css reset
preflight: true,
// Where to look for your css declarations
include: ["./src/components/**/*.{ts,tsx,js,jsx}", "./src/app/**/*.{ts,tsx,js,jsx}"],
// Files to exclude
exclude: [],
// The output directory for your css system
outdir: "styled-system",
})
기존 코드는 다음과 같이 작성되어있을텐데요
import { defineConfig } from "@pandacss/dev"
export default defineConfig({
// Whether to use css reset
preflight: true,
// Where to look for your css declarations
include: ["./app/**/*.{js,jsx,ts,tsx}", "./pages/**/*.{js,jsx,ts,tsx}"],
// Files to exclude
exclude: [],
// Useful for theme customization
theme: {
extend: {}
},
// The output directory for your css system
outdir: "styled-system",
})
src를 받던 부분을 app 으로 바꾸어주겠습니다.
@layer reset, base, tokens, recipes, utilities;
이제 app/global.css로 진입하여 다음 코드를 추가해줍니다.
기존에 작성되어있는 코드는 모두 지워도 좋습니다.
import './global.css'
import { Inter } from 'next/font/google'
const inter = Inter({ subsets: ['latin'] })
export const metadata = {
title: 'Create Next App',
description: 'Generated by create next app',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body className={inter.className}>{children}</body>
</html>
)
}
global.css에 해당 코드를 잘 추가했다면
이제 최상위의 layout.tsx에서 해당 css 파일을 import 해줍니다.
이것으로 초기 세팅은 모두 끝났습니다!
이제 잘 동작하는지 확인해보겠습니다.
import { css } from '@/styled-system/css';
export default function Home() {
return (
<main>
<div
className={css({
fontSize: '2xl',
fontWeight: 'bold',
color: 'GrayText',
})}
>
Hello World
</div>
</main>
);
}
app/page.tsx의 코드를 다음과 같이 수정하고
npm run dev를 통해 실행시켜보세요!
스타일이 적절히 적용되어 나타난다면 성공입니다.
여기까지 마치고나서 만약 git을 사용하고 있다면 많은 변경사항이 나오고 있을 수 있습니다.
이는 빌드 결과물이 gitignore 되고 있지 않기 때문에 발생하는 현상입니다.
루트 폴더에 .gitignore 파일이 있다면 열고 없다면 생성해줍니다.
node_modules
styled-system
.next
pandacss의 빌드 결과물과 next.js의 빌드 결과물을 git에 포함하지 않도록 무시해주는 코드입니다.
수고 많으셨습니다.
본 포스트의 예제코드는 다음 링크에서 확인하실 수 있습니다.
https://github.com/XionWCFM/pandacss-approuter
감사합니다.
'css' 카테고리의 다른 글
display:none과 visibility:hidden의 차이를 아시나요? (1) | 2023.08.24 |
---|---|
shadcn/ui 사용법 익히기 (0) | 2023.08.21 |
빌드타임 css-in-js 이해하기 pandacss와 vanila extract (0) | 2023.08.02 |
swiper/react를 이용하여 반응형 캐러셀 만들기 (5) | 2023.07.31 |
mui 개념과 사용 방법 시작하고 sx 프로퍼티 알아보기 (0) | 2023.07.27 |