npm vs yarn vs pnpm
Table of Contents
์ง๊ธ๊น์ง ์ ๋ ์๋ฌด ์์ฌ ์์ด npm์ ์ฌ์ฉํด์์ต๋๋ค. ์ด๋ฐ๊ธ์ฉ node_modules
ํด๋๊ฐ ์ ๋ฅผ ๊ณ ํต์ค๋ฝ๊ฒ ํ๋ ์๊ฐ๋ค์ด ์์์ง๋ง, ํ๋ก์ ํธ ์ด๊ธฐํ์ ์ ๋ง ์ด์ํ ํ๋๋ง ํ์ง ์์ผ๋ฉด npm i
ํ ์ค๊ณผ ์ปคํผ ํ ์์ผ๋ก ๋ชจ๋ ๊ฒ ๋ฌธ์ ์์ด ๋์ํ์ผ๋๊น์. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ฌ๋์ ์ด๋ค ๋ถ์ ํตํด, npm๋ณด๋ค ์ข์ ๋ฐฉ๋ฒ์ด ์์์ ์๊ณ ์์ต๋๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ yarn
๊ณผ pnpm
์ ์ฒดํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐คท TL;DR
- npm์ ์์กด์ฑ ๊ด๋ฆฌ๋ ์ฌ์ค ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
- ์ด ๋ฌธ์ ๋ฅผ ๋ณด์ํ ํจํค์ง ๋งค๋์ ๊ฐ yarn, pnpm์ด๋ค.
- ๊ฐ ํจํค์ง ๋งค๋์ ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋งค์ฐ ์ฝ๋ค. ๊ธ์ ์ ์ผ๋ก ๊ณ ๋ คํด๋ณด์.
๐ npm
์ฐ์ npm์ ๋๋ค. npm์ ๋ํด ๋ ํ ์ด์ผ๊ธฐ๋ ์์ง๋ง, ์ฐ์ ๋น๊ต๋ฅผ ํ๊ธฐ ์ํด ๊ธฐ์ค์ด ๋ ํ๋ก์ ํธ์ ์์กด์ฑ์ ์ค์นํ๊ณ ์คํ๊น์ง ์งํํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฒ ๊ธ์์ ์คํํ ํ๋ก์ ํธ๋ ์ ๊ฐ ๊ฐ์ธ์ ์ผ๋ก ์ฌ์ฉํ๋ React boilerplate์ ๋๋ค. ์ด๋ค ๊ฒ๋ค์ ํฌํจํ๋์ง๋ ๋ ํฌ์งํ ๋ฆฌ์ README.md๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
์ค์น๊ฐ ๋์์ต๋๋ค. ์ด๋๋ก package.json
์ ์ ์๋ dev ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ฆฌ์กํธ ์๋ฒ์ ์ ์ํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ฌด๋ํ๊ฒ ์งํ์ด ๋์์ต๋๋ค.
๐ Yarn
Yarn์ ๊ฐ์ฅ ํฐ ํน์ง์, ๋น๊ต์ ์ต๊ทผ์ ๋์จ ๋ฒ์ ์ธ Yarn berry์ PnP ์ ๋ต์ ํตํ ํ์ผ ๊ด๋ฆฌ์
๋๋ค. npm์ ๊ธฐ๋ณธ์ ์ผ๋ก ํจํค์ง A, B๊ฐ C๋ฅผ ์ฐธ์กฐํ๋ค๋ฉด ํ๋ก์ ํธ๊ฐ C๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ํด๋ C๋ฅผ node_modules
๋๋ ํ ๋ฆฌ ์ต์์๋ก ํธ์ด์คํ
ํ์ฌ ์ต์ ํ๋ฅผ ์งํํฉ๋๋ค. ํ์ง๋ง ์ด ๋ A, B๊ฐ ์ฐธ์กฐํ๋ C์ ๋ฒ์ ์ด ๋ค๋ฅด๋ค๋ฉด ๋ ๋ฒ์ ์ค ํ๋๋ง์ด ํธ์ด์คํ
๋๋ฉฐ, ์ดํ ํธ์ด์คํ
๋์ง ์์ ๋ฒ์ ์ ์ฐธ์กฐํ๋ ํจํค์ง๊ฐ ๋ง์์ง๋๋ผ๋ ์ด ๊ตฌ์กฐ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ฆ ์์ ํ ์ต์ ํ๋ ๋์ง ์์ต๋๋ค.
๋ฐ๋ฉด Yarn berry์์๋ ํจํค์ง์ ๊ฐ ๋ฒ์ ๋ง๋ค ํ๋์ .zip ํ์ผ๋ก ์ค์น๋๊ณ , ์์ ๋งํ ์ค๋ณต ์ค์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. .zip ํ์ผ๋ก ์์ถ๋๋ฉด์ ์ป๋ ์ฉ๋ ์์ ์ด์ ๋ ์ฑ๊ธธ ์ ์์ต๋๋ค. ์์ธํ ์ค๋ช ์ ํ ์ค ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ์ด๋ณด์ธ์!
๊ทธ๋ผ ์ด์ Yarn ๊ณต์ ๋ฌธ์์ ์ค๋ช
์ ๋ฐ๋ผ์ ์ค์น๋ฅผ ์งํํด ๋ณด๊ฒ ์ต๋๋ค. NodeJS์ Corepack
๊ธฐ๋ฅ์ ์ด์ฉํด์ผ ํ๋ ๋ชจ์์ธ๋ฐ, ๋
ธ๋ ๋ฒ์ 16.10์ ๊ธฐ์ค์ผ๋ก ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๋ NodeJS v16.16.0์ ์ฌ์ฉ์ค์ด๋ฏ๋ก ๋ณ๋ ์ค์น ์์ด corepack์ ํ์ฑํํ๊ฒ ์ต๋๋ค.
corepack enable
corepack prepare yarn@3.2.4 --activate // yarn@stable ๋ ๊ฐ๋ฅํ๋ค๊ณ ํจ
yarn init -2
๐ก yarn init ๋ค์
-2
๋ผ๋ ํ๋๊ทธ๊ฐ Zero-Installs๋ฅผ ์ํ ํ ํ๋ฆฟ์ผ๋ก ์ด๊ธฐํํด ์ฃผ๋ ๋ชจ์์ธ๋ฐ์, Yarn2 (Berry)์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋์ธnode_modules
๋ฅผ ๋์ฒดํ๋ PnP ํจํค์ง ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํด๋น ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ์์ ๋๋ค.-2
๋ฅผ ๋นผ๊ณ ์ด๊ธฐํํด๋ณด๋node_modules
ํด๋๋ฅผ ์ฌ์ฉํ๋๋ก ๋๋๋ผ๊ตฌ์. Zero-Installs์ ๋ํ ๋ด์ฉ์ ์ฌ๊ธฐ์ ๋์ ์์ต๋๋ค.
npm์ผ๋ก ํ๋ ๊ฒ์ฒ๋ผ boilerplate ํ์ผ์ ๋ฐฉ๊ธ ์ด๊ธฐํํ yarn ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํ๊ณ yarn install
์ ์คํํฉ๋๋ค.
๋ญ๊ฐ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๋ฏํ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ค๊ฐ ์ค์น๊ฐ ์๋ฃ๋์์ต๋๋ค. .yarn/cache
๋๋ ํ ๋ฆฌ์ ํจํค์ง๋ค์ด .zip ํ์ผ๋ก ์์ถ๋์ด ๋ค์ด์๋ค์.
์, ๊ทธ๋ฐ๋ฐ ์ด ์ํ๋ก ๋ฐ๋ก ์๋ฒ๋ฅผ ์คํ์ํฌ ์๊ฐ ์์ต๋๋ค. ESLint ํ๋ฌ๊ทธ์ธ๋ ์ด๋๊ฐ ๋ถํธํ์ง ๋น๋ช
์ ์ง๋ฅด๊ณ ์๊ตฌ์. ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง package.json
์๋ ๋ช
์๋์ง ์์ peer-dependency ํจํค์ง๋ค์ด ๋น ์ ธ ์์ด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์ต๋๋ค. ๋คํํ๋ package.json
์์ ์๋์์ฑ๊ณผ ํจ๊ป ๋ฒ์ ๊น์ง ์์์ ์ฑ์์ฃผ์ด์ ์ ๋นํ ์ ์ด์ yarn install
์ ๋ค์ ์งํํ์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ์ด์๋ฅผ ๋ฐ๊ฒฌํ์ง๋ง ๋ต์ ๊ตฌํ์ง ๋ชปํ๊ณ ๊ฒฐ๊ตญ ์ง์ ํ๋์ฉ ์ค์นํ๋ ์์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
๐ง pnpm
๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์๊ณ , yarn๊ณผ ๋ณ ์ฐจ์ด ์์ด corepack์ ํตํด ์ค์นํ์ต๋๋ค. ๋ช ๋ น์ด๋ง ๋ณด๋ฉด์ ํ๋๋ฐ ๋ฌธ๋ ๋ณด๋ ๊ณต์ ๋ฌธ์๊ฐ ์์ด๊ฐ ๋ฐ, ํ๊ตญ์ด๊ฐ ๋ฐ์ผ๋ก ๋์ด ์์๋ค์. ์ ์ฌ์ง์ ๊ธ์ ์ฝ์ง ์๊ณ ๋ฌด์์ ๋ช ๋ น์ด ์คํํ๋ฉด์ ์ฐ์ ์ฌ์ง์ธ๋ฐ, Powershell์ด ๋ญ๊ฐ ํดํดํนํน์ด์ด ๋๋ใด๋ ๊ธฐ๋ถ์ด ๋ค์ด์ ์ฌ๋ ธ์ต๋๋ค.
pnpm install
์ ์คํํ๋, peer dependency ์ด์์ ๋ํ ๋ฉ์์ง๋ฅผ ๋์์ค๋๋ค. yarn์ ์ฌ์ฉํ์ ๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค์. ์ด ๋งํฌ์์ ๋ต์ ์ฐพ์ pnpm i --shamefully-hoist=true
๋ก ์ค์นํ๋ ์์์ ํผ์ด ์์กด์ฑ ํจํค์ง๋ฅผ ๊ฐ์ด ์ค์นํด ์ค๋๋ค.
๐คจ ๋ญ๊ฐ ๋ค๋ฅผ๊น์..?
์ฌ์ค ์ด ์ ๋ ํ ์คํธ๋ก ์ฐจ์ด๋ฅผ ๋๋ผ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๊ทธ๋๋ ์งง์ ์๊ฐ๋์ ๊ฐ ํจํค์ง ๋งค๋์ ๋ฅผ ์ฒดํํด ๋ดค์ผ๋, ๊ทธ๋๋ง ๋์ ๋๋ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
npm
์ ๋ ๋ณด์ ์ผ๋ก ์์กด์ฑ ์ค์น๊ฐ ๋๋ฆฌ๊ณ , ๋ฌด๊ฑฐ์ ์ต๋๋ค.yarn
์ ํจํค์ง ์ฉ๋์ด ์ ๋ง ๊ฐ๋ฒผ์ ์ต๋๋ค.pnpm
์ ํ๋ก์ ํธ๊ฐ ํฌ์ง ์๊ธฐ ๋๋ฌธ์ธ์ง,npm
๊ณผ ๋์ ๋๋ ์ฐจ์ด๋ ์์์ต๋๋ค.pnpm
์ peer-dependency ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ํ๋๊ทธ๋ฅผ ์ง์ํด ์ฃผ๋ ๊ฒ์ด ์ข์์ต๋๋ค. ์ฌ์ค ์ ๊ฐ ๊ฒช์ ๋ฌธ์ ๊ฐ ์ผ๋ฐ์ ์ธ ์ผ์ด์ค๋ ์๋ ๊ฒ ๊ฐ๊ธด ํฉ๋๋ค.- ๊ฑฑ์ ์ด ๋ง์๋
ESLint
๋ ์์ธ๋ก ๊ธ๋ฐฉ ์ ์ฉ๋์์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ํ๋๋ฐ๋ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ค, ๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค.
๋ณด์์ด๋ผ๋์ง, ์ฑ๋ฅ์ด๋ผ๋์ง ๋น๊ต๋ฅผ ํ ์ ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง, ์ ์คํ์ฉ ํ๋ก์ ํธ์์๋ ์ ์๋ฏธํ ์ฐจ์ด๋ฅผ ๋ณด์ด์ง ์์์ต๋๋ค. ๋ค๋ง package.json
์ ์ ์๋ npm scripts๋ฅผ ๋ฌธ์ ์์ด ์คํํด ์ค๋ค๋ ์ ์ด ์ธ์ ๊น์์ต๋๋ค. javascript์์ typescript๋ก ์ฎ๊ฒจ๊ฐ ๋๋ณด๋ค ํจ์ฌ ์น์ ํ๋ค์.
๐ Refs.
https://github.com/yarnpkg/yarn/issues/1503
node_modules๋ก๋ถํฐ ์ฐ๋ฆฌ๋ฅผ ๊ตฌ์ํด ์ค Yarn Berry
pnpm does not resolve dependencies
[๋ฒ์ญ] JavaScript ํจํค์ง ๋งค๋์ ๋น๊ต - npm, Yarn ๋๋ pnpm?
npm, yarn, pnpm ๋น๊ตํด๋ณด๊ธฐ
์ค์นํ๊ธฐ | pnpm
Installation
yarn berry(yarn2) ๋ง์ด๊ทธ๋ ์ด์
๋ฐฉ๋ฒ
yarn berry๋ก React.js ํ๋ก์ ํธ ์์ํ๊ธฐ | Kasterra’s Archive
๊ทธ๋ฆฌ๊ณ ๋ถ์คํธ ์ปจํผ๋ฐ์ค ํ
ํฌํก์์ ๋ฉ์ง ๋ฐํ๋ฅผ ํด ์ฃผ์ J166 ์ดํ์ฐฌ ์บ ํผ๋๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค ๐