C.W.K.
Stream
Lesson 05 of 05 · published

pnpm Wisdom

~9 min · pnpm, wisdom, production

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

pnpm 이 약간 호환성 surface 와 디스크 + strictness 의 큰 승 거래. 이 룰들이 거래를 favorable 하게 유지.

package.json 의 packageManager 로 pnpm 버전 핀. 다른 pnpm 버전이 다른 lockfile 생성. 핀이 버전 drift 로 인한 'works on my machine' 제거.

CI 에서 --frozen-lockfile 사용. npm ci 와 같은 역할 — strict, 빠름, lockfile drift 에 fail.

가끔 pnpm store prune. 글로벌 store 가 더 이상 어떤 프로젝트도 reference 안 하는 패키지 누적. 매월 prune 으로 기가바이트 회수.

신뢰하는 패키지에만 lifecycle script 허용. v10 이 디폴트로 lifecycle script 차단 — 그게 옳은 디폴트. 진짜 필요한 패키지 (esbuild, sharp 등) 에 대해 package.json 의 pnpm.allowedDeprecatedVersionspnpm.onlyBuiltDependencies 로 opt-in.

Strictness 받아들여. pnpm 이 빠진 dep 불평하면 dep fix — pnpm 과 싸우지 마. pnpm 이 잡는 모든 에러가 미래 production 버그 회피.

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 workflow 를 pnpm/action-setup@v4 와 'pnpm install --frozen-lockfile' 사용하도록 업데이트. 빌드 통과하는지 확인 — 모든 환경에 pnpm 버전 lock 됐어.

Progress

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

댓글 0

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

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