๋ณธ ๊ธ์ PNPM ๋ฌธ์์ ์กฐ์ฌํ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก claud.ai๊ฐ ์์ฑํ ๊ธ์ ๋๋ค
๋ณธ ๊ธ์ PNPM ๋ฌธ์์ ์กฐ์ฌํ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก claud.ai๊ฐ ์์ฑํ ๊ธ์ ๋๋ค
PNPM v10์์ ๊ฐ์ฅ ์ฃผ๋ชฉํ ๋งํ ๋ณ๊ฒฝ์ฌํญ ์ค ํ๋๋ ํจํค์ง ํธ์ด์คํ ์ ์ฑ ์ ๋ณํ์ ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์ด์ ๋ฒ์ ๊ณผ v10์์์ ํธ์ด์คํ ๋์ ๋ฐฉ์ ์ฐจ์ด๋ฅผ ์์ธํ ์ดํด๋ณด๊ณ , ์ค์ ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ๋์ํด์ผ ํ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
PNPM์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฒฉํ ํจํค์ง ๊ฒฉ๋ฆฌ๋ฅผ ์งํฅํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋๋ค:
node_modules/.pnpm ๋๋ ํ ๋ฆฌ์ ์ ์ฅpackage.json์ ๋ช
์๋ ์ง์ ์ ์ธ ์์กด์ฑ๋ง ์ ๊ทผ ๊ฐ๋ฅ์ด๋ฌํ ๊ตฌ์กฐ๋ node_modules ์ง์ฅ์ ๋ฐฉ์งํ๊ณ , ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ ์ค์ฌ์ค๋๋ค.
์ด์ ๋ฒ์ ์์๋ ๊ฐ๋ฐ์ ๊ฒฝํ(DX)์ ์ํด ํน์ ํจํค์ง๋ค์ ๋ํด ์๋ ํธ์ด์คํ ์ ์ ๊ณตํ์ต๋๋ค.
node_modules
โโโ .pnpm/ # ์ค์ ํจํค์ง๋ค์ด ์ ์ฅ๋๋ ์์น
โโโ eslint/ # ์๋์ผ๋ก ํธ์ด์คํ
๋ eslint
โโโ prettier/ # ์๋์ผ๋ก ํธ์ด์คํ
๋ prettier
โโโ your-project/ # ํ๋ก์ ํธ ์์กด์ฑ์ด๋ VSCode ๋ฑ์ IDE์์ ํฌ๋งทํฐ๋ ๋ฆฐํฐ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ด์์ต๋๋ค.
v10์์๋ ๋ณด์ ๊ฐํ๋ฅผ ์ํด ์๋ ํธ์ด์คํ ์ ์์ ํ ์ ๊ฑฐํ์ต๋๋ค.
node_modules
โโโ .pnpm/ # ๋ชจ๋ ํจํค์ง๊ฐ ์ด๊ณณ์๋ง ์ ์ฅ๋จ์ด์ ๋ ๋ชจ๋ ํธ์ด์คํ ์ด ๋ช ์์ ์ธ ์ค์ ์ ํตํด์๋ง ๊ฐ๋ฅํฉ๋๋ค:
{
"pnpm": {
"public-hoist-pattern": [
"*eslint*",
"*prettier*",
"@types/*",
"typescript"
]
}
}๋จผ์ ํ๋ก์ ํธ์์ ํธ์ด์คํ ์ด ํ์ํ ๋๊ตฌ๋ค์ ํ์ ํฉ๋๋ค:
{
"pnpm": {
"public-hoist-pattern": [
// ๋ฆฐํฐ/ํฌ๋งทํฐ
"*eslint*",
"*prettier*",
// TypeScript
"@types/*",
"typescript",
// ๊ธฐํ ๊ฐ๋ฐ ๋๊ตฌ
"*webpack*",
"*babel*"
],
// ํธ์ด์คํ
๋ ํจํค์ง์ ์ค๋ณต ์ค์น ๋ฐฉ์ง
"shamefully-hoist": false
}
}์ด๋ฒ ๋ณ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค:
PNPM v10์ ํธ์ด์คํ ์ ์ฑ ๋ณ๊ฒฝ์ ๋จ๊ธฐ์ ์ผ๋ก๋ ์ถ๊ฐ ์ค์ ์ด ํ์ํ ๋ถํธํจ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก๋ ๋ ์์ ํ๊ณ ์์ธก ๊ฐ๋ฅํ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค. ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ ๋ชจ๋ ธ๋ ํฌ ํ๊ฒฝ์์ ์ด๋ฌํ ์๊ฒฉํ ๊ด๋ฆฌ๋ ํฐ ์ด์ ์ด ๋ ์ ์์ต๋๋ค.
๋ ์์ธํ ๋ด์ฉ์ PNPM v10 Braking changes๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.