tabler-icons 서브셋 웹폰트 제작하기
https://github.com/tabler/tabler-icons 저장소에 있는 소스를 기반으로 지정된 아이콘 목록을 기준으로 outline과 filled를 한 개의 웹폰트로 합쳐서 빌드하는 전용 스크립트를 제공합니다.
Tabler Icons 새 버전이 나왔을 때 같은 서브셋을 다시 빌드하려면 아래 절차를 따르면 됩니다.
핵심 요약
- 실행 명령:
node ./.build/build-webfont-subset.mjs - 빌드 스크립트:
./.build/build-webfont-subset.mjs - 아이콘 허용 목록:
./.build/webfont-subset-icons.mjs - 공용 웹폰트 유틸:
./packages/icons-webfont/.build/utilities.mjs
1. 의존성 설치
tabler-icons 프로젝트는 pnpm 기준으로 구성되어 있습니다. npm install은 catalog:와 workspace: 의존성을 처리하지 못하므로 사용하지 않습니다.
corepack enable
corepack prepare pnpm@10.30.3 --activate
pnpm install
이미 pnpm이 설치되어 있다면 아래만 실행하면 됩니다.
pnpm install
2. 아이콘 목록 수정
서브셋 대상 아이콘은 ./.build/webfont-subset-icons.mjs에서 관리합니다.
규칙:
- 기준 파일명은
./icons/outline과./icons/filled에서 공통으로 사용되는 아이콘 이름입니다. - 각 항목은
*.svg형태로 유지합니다. - 중복 항목은 빌드 스크립트가 자동으로 제거합니다.
outline또는filled중 한쪽에 없는 아이콘은 경고를 출력하고, 존재하는 스타일만 포함합니다.
3. 서브셋 빌드 실행
기본 스트로크 두께는 2입니다.
node ./.build/build-webfont-subset.mjs
다른 스트로크 두께로 outline을 만들려면 CLI 인자를 넘기면 됩니다.
node ./.build/build-webfont-subset.mjs --stroke-width=1.5
이 스크립트가 하는 일:
packages/icons-webfont/dist의 이전 결과물을 삭제합니다.- 선택된 아이콘의
outline버전과filled버전을 한 개의 폰트 파일로 합칩니다. outline아이콘은 기본값2또는 전달한stroke-width로 외곽선을 두껍게 변환합니다.outline아이콘은 기존 이름 그대로.ti-아이콘명클래스로 생성합니다.filled아이콘은 같은 폰트 안에서.ti-아이콘명-filled클래스로 생성합니다.- 선택된 아이콘만 포함한
woff2,woff,ttf, CSS를 생성합니다. - 서브셋에 없는 아이콘을 가리키는 alias CSS는 자동으로 제외합니다.
4. 결과 확인
생성 파일:
./packages/icons-webfont/dist/fonts/tabler-icons.woff2./packages/icons-webfont/dist/fonts/tabler-icons.woff./packages/icons-webfont/dist/fonts/tabler-icons.ttf./packages/icons-webfont/dist/tabler-icons.css./packages/icons-webfont/dist/tabler-icons.min.css
빌드 로그에서 확인할 내용:
- 처리된
outline아이콘 개수 - 처리된
filled아이콘 개수 - 누락되어 건너뛴
outline아이콘 목록 - 누락되어 건너뛴
filled아이콘 목록 - 최종 출력 디렉터리
생성되는 클래스 예시:
outline:.ti-alert-circlefilled:.ti-alert-circle-filled
5. 문제 해결
Skipping missing outline icons가 출력되면 ./icons/outline에 해당 파일이 있는지 확인합니다.
Skipping missing filled icons가 출력되면 ./icons/filled에 해당 파일이 있는지 확인합니다. 일부 아이콘은 outline만 있고 filled는 없을 수 있습니다.
스트로크 두께를 바꾸려면 node ./.build/build-webfont-subset.mjs --stroke-width=1.5처럼 실행합니다.
stroke-width에 0 이하 값이나 숫자가 아닌 값을 주면 빌드가 실패합니다.
현재 버전에는 없던 아이콘이 다음 버전에서 추가되면, 허용 목록에만 이미 들어 있다면 스크립트를 바꾸지 않고 다시 실행하는 것만으로 자동 반영됩니다.