Codemod
SEED V2 아이콘을 V3 아이콘으로 변환하는 Codemod
업그레이드 방법
현재 아이콘을 사용하고 있는 방법에 따라 적용할 수 있는 2가지 방법이 있어요.
Codemod 스크립트
아래 3개 아이콘 패키지를 사용하고 있다면, 제공되는 codemod 스크립트를 사용해서 리뉴얼된 아이콘 패키지로 손쉽게 업그레이드할 수 있어요.
@seed-deesign/react-icon
@seed-design/icon
(deprecated)@karrotmarket/karrot-ui-icon
(deprecated) (React 컴포넌트를 사용하는 경우)
3개 패키지에서 사용하고 있는 아이콘은 @karrotmarket/react-monochrome-icon
의 아이콘으로 대체돼요.
수동 업그레이드
다음과 같은 경우에는 수동으로 업그레이드해야 해요.
- PNG, SVG 등의 파일로 기존 아이콘을 사용하는 경우
@karrotmarket/karrot-ui-icon
(deprecated)에서 제공되는 SVG 파일을 사용하는 경우
- 다음 패키지를 사용하는 경우
작업 순서
시작하기 전
많은 변경사항이 발생하게 되므로, 커밋하지 않은 변경사항이 없는지 확인하고 시작하는 것이 좋아요.
Codemod 스크립트
리뉴얼된 아이콘 패키지 설치
패키지 설명
2개 패키지 중 필요한 패키지만 설치해요.
@karrotmarket/react-monochrome-icon
- 단색 아이콘 패키지에요. 일반 아이콘, 카테고리 아이콘, 서비스 아이콘이 포함되어 있어요.
- 이 패키지에서 제공되는 서비스 아이콘은 검은색으로만 사용할 수 있어요.
- codemod 실행 시, 기존 패키지들의 아이콘은 모두 이 패키지의 아이콘으로 대체돼요.
@karrotmarket/react-multicolor-icon
- 멀티컬러 아이콘 패키지에요. 카테고리 아이콘과 서비스 아이콘이 포함되어 있어요.
- 이 패키지에서 제공되는 카테고리 아이콘과 서비스 아이콘은 패키지에서 제공되는 색상 그대로만 사용할 수 있어요.
- 기존에 SVG로 사용하던 멀티컬러 아이콘들을 이 패키지로 직접 대체할 수 있어요. 따라서, 필요한 경우에만 설치해도 좋아요.
Codemod 스크립트 실행
경로 내의 코드를 일괄적으로 변환하는 codemod 스크립트를 실행해요.
Node.js 요구사항
스크립트 실행을 위해서는 Node.js 20.16.0 이상의 버전이 필요해요. 버전 요구사항을 만족시키지 않으면 안내 문구가 표시돼요.
nvm을 사용한다면 codemod 실행을 위해 Node.js 버전을 잠시 변경할 수 있어요.
옵션
--log
- 로그를 파일로 저장해요.
./
에migrate-icons-combined.log
와migrate-icons-warnings.log
파일이 생성돼요.
--extensions
- 변환할 파일 확장자를 지정해요.
- 이 옵션을 지정하지 않으면 경로 안의
js
,jsx
,ts
,tsx
파일을 변환해요. (d.ts
제외) - 예시:
--extensions="ts,tsx"
--ignore-config
- 변환하지 않을 경로들을 glob 패턴으로 작성한 파일을 지정해요.
- 예시:
--ignore-config=".gitignore"
- 이 옵션을 지정하지 않아도 jscodeshift에 의해
**/node_modules/**
는 자동으로 무시돼요.
결과 확인
문제 없이 모든 변환이 완료된 경우 다음과 같은 결과가 표시돼요.
결과별 설명
errors
: 파싱 오류 등으로 인해, 아이콘을 참조하는 코드가 있는지 확인하지 못한 파일의 수에요.- 에러가 발생한 파일에 이전 아이콘을 참조하는 코드가 없다면, 해당 파일에서 발생하는 에러는 무시해도 좋아요.
- 이전 아이콘을 참조하는 코드가 있다면, 문제가 발생한 부분을 수정하고 다시 스크립트를 실행하거나, 해당 파일의 아이콘 마이그레이션을 직접 진행해주세요.
unmodified
: 아이콘을 참조하는 코드가 없어, 아무 변환도 이루어지지 않은 파일의 수에요.skipped
: 빈 파일 등 변환 대상이 아니어서, 아무 변환도 이루어지지 않은 파일의 수에요.ok
: 변환이 이루어진 파일의 수에요.
파싱 오류
codemod 스크립트 실행 중 파싱 오류가 발생할 수 있어요. 파싱 오류는 다음과 같은 이유로 발생해요.
assert
를 사용한 import assertion과 같은, deprecated된 문법이 있는 경우package
와 같은 예약어를 변수 이름으로 사용한 경우 등
코드 포맷
프로젝트에서 사용하는 포매터를 사용해서 코드를 포맷해요.
사이드 이펙트 확인
- 사이드 이펙트가 발생했는지 확인하여 의도한 대로 변경이 이루어졌는지 검토해요.
- 디자인 QA 과정에서, 자동으로 변경된 아이콘이 아닌 새로운 아이콘을 사용하도록 결정되었을 수 있어요. 이러한 경우, Figma 디자인 파일을 참고하여 코드에 반영해요.
- 멀티컬러 아이콘 사용이 필요한 곳에는 멀티컬러 아이콘 패키지를 사용해주세요.
발생 가능한 사이드 이펙트
정확히 대응되는 리뉴얼된 아이콘이 없는 경우
- 이전 아이콘 중 아래 5개 아이콘(총 15개 variant)은 리뉴얼된 아이콘 패키지에 시각적으로 정확히 대응되는 항목이 없어요.
- codemod 스크립트 실행 시 추천되는 아이콘으로 변환되지만, 시각적인 차이가 크기 때문에 변경 후 확인이 필요해요.
이전 아이콘 이름 | 리뉴얼된 아이콘 이름 |
---|---|
IconBoldThin | |
IconBoldRegular | |
IconBoldFill | |
IconCobuyingThin | |
IconCobuyingRegular | |
IconCobuyingFill | |
IconDeliveryThin | |
IconDeliveryRegular | |
IconDeliveryFill | |
IconSuggestThin | |
IconSuggestRegular | |
IconSuggestFill | |
IconWriteStoryThin | |
IconWriteStoryRegular | |
IconWriteStoryFill |
사용 여부 확인 방법
- codemod 스크립트 사용 시, 5개 아이콘(총 15개 variant)이 사용된 경우 터미널에 메시지가 출력돼요.
- codemod 스크립트를
--log
flag와 함께 사용 시, 사용된 내역이migrate-icons-warnings.log
에 기록돼요. - 다음을 활용하여 코드를 직접 검색할 수 있어요.
여러 이전 아이콘이 하나의 리뉴얼된 아이콘으로 대체되는 경우
이전 아이콘과 리뉴얼된 아이콘은 n:1
로 대응돼요. 따라서, 같은 페이지에 표시되었던 서로 다른 여러 개의 아이콘이, 동일한 리뉴얼된 아이콘으로 대체되는 경우가 있어요. 의도한 목적대로 아이콘이 표시되는지 확인해요.
- 한 이전 아이콘의 3개 variant 중
Thin
variant와Regular
variant는 리뉴얼된 아이콘에서 모두Line
variant로 대체돼요.- 예를 들면,
IconForwardThin
,IconForwardRegular
는 모두IconArrowRightLine
으로 대체돼요. - 이전 아이콘의
Fill
variant는 리뉴얼된 아이콘에서도Fill
variant로 대체돼요.
- 예를 들면,
- 여러 개의 이전 아이콘이 하나의 리뉴얼된 아이콘으로 대체되는 경우도 있어요.
- 예를 들면,
IconHeadphoneRegular
,IconHelpcenterRegular
,IconHelperRegular
는 모두IconHeadsetLine
으로 대체돼요.
- 예를 들면,