피드로 돌아가기
I Published My First npm Package: Here's Everything I Wish I Knew
Dev.toDev.to
Frontend

Circular Reference 해결 및 2KB 초경량 JSON Stringify 패키지 설계

I Published My First npm Package: Here's Everything I Wish I Knew

Alex Chen2026년 5월 15일6beginner

Context

기존 JSON.stringify의 Circular Reference 처리 불가로 인한 TypeError 발생 및 BigInt 타입 처리 부재라는 제약 사항 존재. 이를 해결하기 위한 Zero-dependency 기반의 안전하고 빠른 직렬화 라이브러리 필요성 대두.

Technical Solution

  • WeakSet을 활용한 객체 참조 추적을 통해 Circular Reference 탐지 시 '[Circular]' 문자열로 대체하는 로직 설계
  • BigInt 타입의 문자열 변환 및 배열 내 undefined 값의 null 치환을 통한 JSON 표준 준수 및 데이터 무결성 확보
  • package.json의 files 필드를 명시하여 불필요한 설정 파일 배제를 통한 패키지 경량화 달성
  • TypeScript Declaration 파일(index.d.ts) 제공으로 JS 기반 라이브러리의 정적 타입 안정성 확보
  • prepublishOnly 스크립트를 통한 배포 전 테스트 자동화로 런타임 오류 방지 체계 구축
  • GitHub Actions와 npm provenance를 결합한 CI/CD 파이프라인으로 배포 무결성 및 자동화 구현

Impact

  • Bundle Size: 2KB(minified)의 초경량 구조 달성
  • Dependencies: 0개로 외부 의존성 완전 제거
  • 성과: 출시 1개월 만에 약 2,500회 다운로드 및 12개 Star 획득

- npm 패키지 배포 시 'files' 필드를 명시하여 배포 아티팩트 크기 최적화 - JS 라이브러리 개발 시에도 .d.ts 파일을 통해 TypeScript 사용자 경험 제공 - npm publish --access public 플래그를 통한 Scoped 패키지 공개 설정 확인 - 배포 전 npm pack --dry-run 명령어로 실제 배포될 파일 목록 사전 검증

원문 읽기