본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

pnpm을 안정적으로 운영하는 법

~9 min · pnpm, wisdom, production

Level 0입문자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

pnpm은 약간의 호환성 부담을 감수하고 큰 디스크 절약과 엄격한 의존성 검사를 얻는 선택이야. 아래 규칙을 지키면 장점이 부담보다 크게 남아.

package.json의 packageManager로 pnpm 버전을 고정해. pnpm 버전이 다르면 만들어지는 lockfile도 달라질 수 있어. 버전을 고정하면 환경 차이에서 생기는 '내 컴퓨터에서는 된다' 문제를 줄여.

CI에서는 --frozen-lockfile을 써. npm ci와 같은 역할로 빠르고 엄격하게 설치하며 lockfile이 달라지면 실패해.

가끔 pnpm store prune을 실행해. 전역 저장소에는 어느 프로젝트에서도 더 이상 참조하지 않는 패키지가 쌓여. 매달 정리하면 몇 GB를 되찾을 수도 있어.

신뢰하는 패키지에만 lifecycle script를 허용해. v10이 이를 기본 차단하는 것은 올바른 선택이야. esbuild나 sharp처럼 실제로 필요한 패키지만 package.json의 pnpm.allowedDeprecatedVersionspnpm.onlyBuiltDependencies로 명시적으로 허용해.

엄격함을 받아들여. pnpm이 빠진 의존성을 지적하면 pnpm을 우회하지 말고 선언을 고쳐. 지금 잡은 오류 하나가 미래의 운영 장애 하나를 막는 셈이야.

Code

프로젝트별 pnpm 버전 고정·json
// package.json
{
  "name": "my-project",
  "version": "0.1.0",
  "packageManager": "pnpm@10.0.0",
  "scripts": { "build": "vite build" },
  "pnpm": {
    "onlyBuiltDependencies": ["esbuild", "sharp"]
  }
}
pnpm용 GitHub Actions·yaml
# .github/workflows/ci.yml
name: ci
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'pnpm'
      - run: pnpm install --frozen-lockfile
      - run: pnpm test

External links

Exercise

프로젝트 package.json에 'packageManager: pnpm@<버전>'을 추가해. 이어서 CI 작업 흐름이 pnpm/action-setup@v4와 'pnpm install --frozen-lockfile'을 쓰도록 바꾸고 빌드가 통과하는지 확인해. 이제 모든 환경에서 pnpm 버전이 같아져.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.