본문 바로가기
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.allowedDeprecatedVersions와 pnpm.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

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

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