Classifying Dependencies with PNPM Catalogs in Monorepo Proj
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

의존성 분류하기

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

프로젝트 의존성 관리에 관심 있는 중급 이상 개발자 (특히 모노레포 환경에서 작업하는 팀)

핵심 요약

  • dependencies는 프로덕션 실행 필수, devDependencies는 개발/빌드 단계에 한정
  • PNPM 카탈로그(catalogs)는 버전 일관성 관리와 의존성 분류를 위한 중앙화된 시스템 제공
  • catalog: 신택스를 통해 프런트엔드/백엔드/인라이닝 등 세부 카테고리 구분 가능

섹션별 세부 요약

1. 전통적 의존성 분류

  • dependencies는 실행 필수, devDependencies는 린트/테스트 등 개발 도구에 한정
  • 예: eslintdevDependencies, vuedependencies에 포함
  • vite 같은 도구는 dependencies만 설치, devDependencies는 무시

2. 전통적 접근의 한계

  • devDependencies에 포함된 패키지의 용도가 모호 (예: vue가 테스트용일 수도 있음)
  • package.json 주석 지원 부재로 의존성 목적 파악 어려움

3. PNPM 카탈로그 도입

  • pnpm-workspace.yamlcatalogs 정의 후 package.json에서 catalog:으로 참조
  • 예:

```json

"dependencies": {

"vue": "catalog:frontend",

"cac": "catalog:prod"

}

```

  • Named 카탈로그를 통해 프런트엔드/백엔드/인라이닝 등 세부 분류 가능

4. 카탈로그 활용 사례

  • Vite: optimizeDeps 설정에 catalogs.frontend 포함

```ts

optimizeDeps: {

include: Object.keys(yaml.catalogs.frontend)

}

```

  • Unbuild: 외부화/인라이닝 제어에 catalogs.prod/catalogs.inlined 활용

```ts

externals: Object.keys(yaml.catalogs.prod),

inlineDependencies: Object.keys(yaml.catalogs.inlined)

```

5. 도구 지원 생태계

  • taze: 카탈로그 기반 버전 관리
  • eslint-plugin-pnpm: package.json에 카탈로그 강제 적용
  • node-modules-inspector: node_modules 시각화 및 카탈로그 레이블링
  • nip: 카탈로그 기반 패키지 설치 CLI

결론

  • PNPM 카탈로그를 통해 의존성 분류와 버전 관리의 유연성을 확보
  • catalog: 신택스로 프런트엔드/백엔드/인라이닝 등 세부 분류 가능
  • taze, eslint-plugin-pnpm 등 도구와의 통합으로 DX 향상
  • 모노레포 환경에서 버전 일관성의존성 투명성 달성 가능