← λͺ©λ‘μœΌλ‘œ
PNPM v10 braking changes

λ³Έ 글은 PNPM λ¬Έμ„œμ™€ μ‘°μ‚¬ν•œ 자료λ₯Ό λ°”νƒ•μœΌλ‘œ claud.aiκ°€ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€

λ“€μ–΄κ°€λ©°

PNPM v10μ—μ„œ κ°€μž₯ μ£Όλͺ©ν•  λ§Œν•œ 변경사항 쀑 ν•˜λ‚˜λŠ” νŒ¨ν‚€μ§€ ν˜Έμ΄μŠ€νŒ… μ •μ±…μ˜ λ³€ν™”μž…λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” 이전 버전과 v10μ—μ„œμ˜ ν˜Έμ΄μŠ€νŒ… λ™μž‘ 방식 차이λ₯Ό μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ³ , μ‹€μ œ ν”„λ‘œμ νŠΈμ—μ„œ μ–΄λ–»κ²Œ λŒ€μ‘ν•΄μ•Ό ν•˜λŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

PNPM의 κΈ°λ³Έ μ² ν•™: Strictν•œ 격리

PNPM은 기본적으둜 μ—„κ²©ν•œ νŒ¨ν‚€μ§€ 격리λ₯Ό μ§€ν–₯ν•©λ‹ˆλ‹€. μ΄λŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€:

  1. λͺ¨λ“  μ˜μ‘΄μ„±μ€ node_modules/.pnpm 디렉토리에 μ €μž₯
  2. 각 νŒ¨ν‚€μ§€λŠ” package.json에 λͺ…μ‹œλœ 직접적인 μ˜μ‘΄μ„±λ§Œ μ ‘κ·Ό κ°€λŠ₯
  3. Symlinkλ₯Ό ν†΅ν•œ μ˜μ‘΄μ„± μ—°κ²°

μ΄λŸ¬ν•œ κ΅¬μ‘°λŠ” node_modules μ§€μ˜₯을 λ°©μ§€ν•˜κ³ , 잠재적인 λ³΄μ•ˆ μœ„ν—˜μ„ μ€„μ—¬μ€λ‹ˆλ‹€.

v9κΉŒμ§€μ˜ ν˜Έμ΄μŠ€νŒ… μ •μ±…

이전 λ²„μ „μ—μ„œλŠ” 개발자 κ²½ν—˜(DX)을 μœ„ν•΄ νŠΉμ • νŒ¨ν‚€μ§€λ“€μ— λŒ€ν•΄ μžλ™ ν˜Έμ΄μŠ€νŒ…μ„ μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€.

node_modules
β”œβ”€β”€ .pnpm/          # μ‹€μ œ νŒ¨ν‚€μ§€λ“€μ΄ μ €μž₯λ˜λŠ” μœ„μΉ˜
β”œβ”€β”€ eslint/         # μžλ™μœΌλ‘œ ν˜Έμ΄μŠ€νŒ…λœ eslint
β”œβ”€β”€ prettier/       # μžλ™μœΌλ‘œ ν˜Έμ΄μŠ€νŒ…λœ prettier
└── your-project/   # ν”„λ‘œμ νŠΈ μ˜μ‘΄μ„±

μžλ™ ν˜Έμ΄μŠ€νŒ…λ˜λŠ” νŒ¨ν‚€μ§€λ“€

  • ESLint κ΄€λ ¨ νŒ¨ν‚€μ§€
  • Prettier κ΄€λ ¨ νŒ¨ν‚€μ§€
  • 일뢀 개발 도ꡬ

μ΄λŠ” VSCode λ“±μ˜ IDEμ—μ„œ ν¬λ§·ν„°λ‚˜ λ¦°ν„°λ₯Ό μ‰½κ²Œ 찾을 수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•œ κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

v10의 λ³€κ²½λœ ν˜Έμ΄μŠ€νŒ… μ •μ±…

v10μ—μ„œλŠ” λ³΄μ•ˆ κ°•ν™”λ₯Ό μœ„ν•΄ μžλ™ ν˜Έμ΄μŠ€νŒ…μ„ μ™„μ „νžˆ μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.

node_modules
└── .PNPM/          # λͺ¨λ“  νŒ¨ν‚€μ§€κ°€ μ΄κ³³μ—λ§Œ μ €μž₯됨

μ΄μ œλŠ” λͺ¨λ“  ν˜Έμ΄μŠ€νŒ…μ΄ λͺ…μ‹œμ μΈ 섀정을 ν†΅ν•΄μ„œλ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€:

{
  "pnpm": {
    "public-hoist-pattern": [
      "*eslint*",
      "*prettier*",
      "@types/*",
      "typescript"
    ]
  }
}

λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ κ°€μ΄λ“œ

1. ν•„μš”ν•œ 도ꡬ νŒŒμ•…ν•˜κΈ°

λ¨Όμ € ν”„λ‘œμ νŠΈμ—μ„œ ν˜Έμ΄μŠ€νŒ…μ΄ ν•„μš”ν•œ 도ꡬ듀을 νŒŒμ•…ν•©λ‹ˆλ‹€:

  • IDE ν”ŒλŸ¬κ·ΈμΈμ΄ ν•„μš”λ‘œ ν•˜λŠ” νŒ¨ν‚€μ§€
  • κΈ€λ‘œλ²Œ 접근이 ν•„μš”ν•œ 개발 도ꡬ
  • TypeScript κ΄€λ ¨ νŒ¨ν‚€μ§€

2. package.json μ„€μ •ν•˜κΈ°

{
  "pnpm": {
    "public-hoist-pattern": [
      // λ¦°ν„°/포맷터
      "*eslint*",
      "*prettier*",

      // TypeScript
      "@types/*",
      "typescript",

      // 기타 개발 도ꡬ
      "*webpack*",
      "*babel*"
    ],
    // ν˜Έμ΄μŠ€νŒ…λœ νŒ¨ν‚€μ§€μ˜ 쀑볡 μ„€μΉ˜ λ°©μ§€
    "shamefully-hoist": false
  }
}

λ³€κ²½μ˜ 의미

이번 변경은 λ‹€μŒκ³Ό 같은 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€:

  1. λ³΄μ•ˆ κ°•ν™”: μ˜λ„ν•˜μ§€ μ•Šμ€ νŒ¨ν‚€μ§€ 접근을 μ›μ²œ 차단
  2. λͺ…μ‹œμ„± 증가: ν˜Έμ΄μŠ€νŒ…μ΄ ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό λͺ…ν™•νžˆ λ¬Έμ„œν™”
  3. μ˜μ‘΄μ„± 관리 κ°œμ„ : 잠재적인 좩돌과 버전 뢈일치 λ°©μ§€

마치며

PNPM v10의 ν˜Έμ΄μŠ€νŒ… μ •μ±… 변경은 λ‹¨κΈ°μ μœΌλ‘œλŠ” μΆ”κ°€ 섀정이 ν•„μš”ν•œ λΆˆνŽΈν•¨μ„ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μž₯κΈ°μ μœΌλ‘œλŠ” 더 μ•ˆμ „ν•˜κ³  예츑 κ°€λŠ₯ν•œ μ˜μ‘΄μ„± 관리λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•  κ²ƒμž…λ‹ˆλ‹€. 특히 λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈλ‚˜ λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œ μ΄λŸ¬ν•œ μ—„κ²©ν•œ κ΄€λ¦¬λŠ” 큰 이점이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

더 μžμ„Έν•œ λ‚΄μš©μ€ PNPM v10 Braking changesλ₯Ό μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.