npm과 의존성 관리

npm 의존성 관리

npm은 패키지를 설치하는 명령어 모음이 아니라 package.json, lockfile, semver, scripts로 프로젝트의 실행 조건을 재현 가능하게 만드는 시스템입니다. 특히 lockfile과 의존성 범위가 협업 품질을 좌우합니다.

01

패키지 역할 구분

런타임에 필요한 패키지와 개발 중에만 필요한 패키지를 나누어 배포 크기와 실행 환경을 정리합니다.

deps
02

버전 범위 이해

^와 ~는 자동 업데이트 범위를 뜻하므로 semver 규칙을 모르면 예기치 않은 버전이 설치될 수 있습니다.

semver
03

lockfile로 재현

package-lock.json은 하위 의존성까지 고정해 CI와 팀원의 설치 결과를 맞춥니다.

deterministic
04

script로 작업 표준화

build, test, lint, dev 같은 반복 작업을 npm scripts로 고정하면 실행 방식이 문서가 됩니다.

automation
dependencies
앱 실행에 필요한 패키지 서버나 브라우저 런타임에서 실제로 import되는 코드입니다.
runtime
devDependencies
빌드와 테스트에 필요한 패키지 TypeScript, Vite, Jest처럼 개발 도구 성격이 강합니다.
tooling
peerDependencies
호스트 프로젝트가 제공해야 하는 패키지 React 플러그인이나 UI 라이브러리처럼 버전 호환성이 중요한 경우에 씁니다.
compat

CI 설치 · 버전 충돌 · 보안 확인

CI 설치 협업과 배포 환경에서는 npm install보다 npm ci가 재현성에 유리합니다.
버전 충돌 중복 설치나 peer 경고는 무시하지 말고 실제 런타임 충돌 가능성을 봅니다.
보안 점검 audit 결과는 심각도보다 실제 노출 경로와 패치 가능성을 함께 판단합니다.

버전 범위 읽기

^1.2.3  -> 1.x 안에서 업데이트 가능
~1.2.3  -> 1.2.x 안에서 업데이트 가능
1.2.3   -> 정확히 이 버전