의존성 분류하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
프로젝트 의존성 관리에 관심 있는 중급 이상 개발자 (특히 모노레포 환경에서 작업하는 팀)
핵심 요약
dependencies
는 프로덕션 실행 필수,devDependencies
는 개발/빌드 단계에 한정- PNPM 카탈로그(catalogs)는 버전 일관성 관리와 의존성 분류를 위한 중앙화된 시스템 제공
catalog:
신택스를 통해 프런트엔드/백엔드/인라이닝 등 세부 카테고리 구분 가능
섹션별 세부 요약
1. 전통적 의존성 분류
dependencies
는 실행 필수,devDependencies
는 린트/테스트 등 개발 도구에 한정- 예:
eslint
는devDependencies
,vue
는dependencies
에 포함 vite
같은 도구는dependencies
만 설치,devDependencies
는 무시
2. 전통적 접근의 한계
devDependencies
에 포함된 패키지의 용도가 모호 (예:vue
가 테스트용일 수도 있음)package.json
주석 지원 부재로 의존성 목적 파악 어려움
3. PNPM 카탈로그 도입
pnpm-workspace.yaml
에catalogs
정의 후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 향상- 모노레포 환경에서 버전 일관성과 의존성 투명성 달성 가능