일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- error
- Next
- CORS
- useRouter
- 프로젝트 셋팅
- 프로그래머스
- 모던 자바스크립트
- git
- vercel
- array정적메서드
- 초기셋팅
- 코테
- 오블완
- nextjs
- 내일배움캠프
- 티스토리챌린지
- 모던자바스크립트
- 스파르타코딩클럽
- js
- 소셜 로그인
- 셋팅
- 코드카타
- 구글 로그인
- 자주 까먹는
- domain
- React
- vscode
- deep dive
- 코딩테스트
- 리터럴
- Today
- Total
파피루스
tailwind css가 dev, prod에 올리면 적용되지 않아요 본문
문제 상황
- tailwind css 공식문서에서 하라는 대로 했지만, tailwind가 적용되지 않아 브라우저에서 보면 스타일이 다 깨져있다.
참고) 나의 개발 환경은...
- vite, react, typescript, scss 를 사용하고 있다. (sass를 tailwind로 교체 중)
- local 은 vite를 사용해 테스트하고, dev, prod 는 express 서버를 이용한다.
- ci 는 jenkins, docker 파일을 이용해 구현되어 있으며, install 과 build가 분리되어 있으며, 서버를 내리지 않고 container 교체 방식으로 진행된다.
우선 어디가 문제인지 보자
⬇️결론은 맨 아래 ⬇️
왜 스타일이 깨질까? 생각해 아래와 같은 가설을 만들었다.
[가설 1] tailwind install이 안되어 있다.
[가설 2] tailwind로 사용할 className 선언부가 적힌 css 파일이 없다.
[가설 3] css 파일이 최신 버전이 아니다.
[가설 1] tailwind install이 안되어 있다. ---> ✖️
우선 package.json 파일을 확인했다
package.json 파일에 tailwindcss, postcss, autoprefixer 세가지 모두 devDependencies에 잘 적혀있었다.
❓ 근데 왜 devDependencies에 적혀있지? (참고 문서)
: tailwind 설치할 때 tailwind index.css 파일을 compile 해서 output.css 파일을 만들어 import 하도록 공식 문서에 적혀있다.
output.css 으로 tailwind에서 사용하는 className을 모두 선언해 import 했기에, tailwind가 설치되지 않은 환경에서도 정상적으로 동작하는 것이 정상이다.
➡️ 따라서 dev/prod 환경에는 tailwind가 설치될 필요가 없기에, 이건 원인이 될 수 없다. PASS!
[가설 2] tailwind로 사용할 className 선언부가 적힌 css 파일이 없다. ---> ✖️
직접 서버에 접근해 파일이 있나? 찾아봤다.
UI build 된 파일들을 보고 싶다. build가 제대로 안되었거나 파일이 캐싱되었거나 아무튼 파일이 문제인 것 같다.라고 제보했고 권한을 받아 직접 서버 접근해서 찾아보니 파일이 잘 있었다.
[가설 3] css 파일이 최신 버전이 아니다. ---> ⭕
ㄱ. build script 변경
tailwind-output.css 파일을 직접 비교해보니, 로컬에 있는 파일과 dev/prod에 배포되어 있는 파일의 내용물이 달랐다.
(서버에 있는 tailwind-output.css 파일은 100줄이 채 안되어서 다르다는 것을 금방 인지할 수 있었다.)
나는 아래와 같은 Dockerfile로 배포 중이라는 것을 알아냈고,
package.json의 build script를 변경했다.
- 변경 전 : "build": "tsc && vite build",
- 변경 후 : "build": "npx tailwindcss -i ./src/tailwind.css -o ./src/tailwind-output.css && tsc && vite build",
두근 거리는 마음으로 dev를 확인했는데, 여전히 스타일이 깨졌다...
생각해보니 서버쪽 설정이 어찌되어 있는지 모르지만, tailwindcss가 dev에도 설치되어 있지 않다면 output 파일을 제대로 만들어내지 못할 것 같았다. 다시 서버 파일과 로컬 파일을 비교하니 역시나 여전히 동일한 내용이 아니였다.
우선 build script를 롤백하고 tailwind.css 파일이 변경될 때마다, 내가 다시 말아서 commit 하는 것으로 일단락 지었다.
ㄴ. css import 정리 ------> ⭕나의 해결책
사실 이쯤 왔을 때는 좀 감이 안잡혀서 난감했다.
그러다가 tailwind 공식문서를 찬찬히 뜯어보다가 이런 글을 발견했다.
100% 연관되어 있는 글은 아니지만, 갑자기 내 프로젝트 PrimeReact lib 가 설치되어 있다는 것이 생각났고,
관련 css 파일 import 가 어떻게 되어 있는지 확인해보았다.
tailwind 설치할 때도, primereact를 얼기설기 엉망으로 사용하고 있어 tailwind가 제대로 작동하지 않았기에,
일부 css 파일을 주석처리하고 깨지는 부분을 따로 처리해주고 있었다.
혹시.. tailwind-output.css 파일을 만들 때 저 파일들 내부에 선언된 내용과 충돌이 날 수 있나?
(로그 상으로 확인했을 때는 이런 거 하나 안떴지만, 이땐 뭐라도 의심해보고 있었다.)
PrimeReact docs에서 tailwind를 검색해보니 요런 글이 나왔고, 바로 작업해보았다.
아이콘 관련 css 파일은 옮기니, 로컬에서도 제대로 동작하지 않아서 우선 가만히 두었고,
나머지 두개의 primereact용 css import 를 tailwind.css 파일로 옮겼다.
이렇게 하고 tailwind css 를 다시 말고("css": "npx tailwindcss -i ./src/styles/tailwind.css -o ./src/styles/tailwind-output.css"), dev에 올려보니 해결되었다!!!
결론 : ui lib의 css import 방식이 tailwind-output.css 파일을 생성하는 데에 영향을 미친다.
'Today I Learned > in dev' 카테고리의 다른 글
SockJs 적용하기 (React/typescript) (0) | 2024.12.23 |
---|---|
[CORS] fetch는 OK인데, axios에서만 CORS가 나요 (0) | 2024.11.26 |
세션이란? (feat. cookie) (0) | 2024.11.24 |
[vscode] delete `CR` error 해결법 (0) | 2024.11.16 |
기존 react 프로젝트에 typescript 도입하기 (0) | 2024.11.01 |