Package Manager
ํจํค์ง ๋งค๋์
ํจํค์ง ๋งค๋์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.
- ์์กด์ฑ ์ค์น / ์ญ์ / ์ ๋ฐ์ดํธ
- ์์กด์ฑ ๊ด๋ฆฌ
- ํจํค์ง ๋ฐฐํฌ
- ์บ์ฑ
- ๋ณด์
๋๋ถ๋ถ์ ํจํค์ง ๋งค๋์ ๊ฐ ๊ธฐ๋ฅ์ ์ผ๋ก ๋น์ทํ๊ฒ ๋ณด์ผ ์ ์์ผ๋, ๋ด๋ถ์ ์ผ๋ก๋ ๋งค์ฐ ๋ค๋ฅด๋ค. npm/ yarn classic์ ๊ฒฝ์ฐ node_modules
๋ผ๋ ํด๋์์ flatํ๊ฒ ์ ์ฅ๋๋ ๊ตฌ์กฐ๋ก dependency๋ฅผ ์ค์นํ๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๋นํจ์จ์ ์ด๊ณ ๊นจ์ง๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์๊ฐ ์๋ค.
pnpm, yarn berry๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ๋ง์ ํจํค์ง ๋งค๋์ ๋ค ์์์ ์ฐ๋ฆฌ์ ์ํฌํ๋ก์ฐ์ ์๋ง๊ฒ ์ ํํด์ผ ํ ์๊ฐ์ด ์๋ค.
NPM
npm์ ๋นํจ์จ์ ์ธ ์์กด์ฑ ๊ฒ์
npm ์ ํ์ผ ์์คํ ์ ์ด์ฉํด์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ค. node_modules๋ผ๋ ํด๋ ๋ด์ ๋ชจ๋ ์์กด์ฑ์ flatํ๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ ํน์ง์ธ๋ฐ ์ด๋ ๋นํจ์จ์ ์ผ๋ก ๋์ํ๋ค.
์๋ฅผ ๋ค์ด require('react')
๋ผ๋ ํจํค์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์์, npm์ ํด๋น ํจํค์ง๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ณ์ ์์ ๋๋ ํ ๋ฆฌ์ node_modulesํด๋๋ฅผ ํ์ํ๋ค. ํจํค์ง๋ฅผ ๋ฐ๋ก ์ฐพ์ง ๋ชปํ ์๋ ์๊ณ ์ค๊ฐ์ ์คํจํ๊ธฐ๋ ํ๋ค.
๋นํจ์จ์ ์ธ ์ค์น
npm์์ node_modules๋ ๋งค์ฐ ํฐ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค. ์ถ๊ฐ๋ก, ๋งค์ฐ ํฐ ๋๋ ํฐ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์ค์น๊ฐ ์ ํจํ ์ง ๊ฒ์ฆํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ ๋ น ์์กด์ฑ
npm๊ณผ yarn 1.x์ ์ค๋ณต๋์ด ์ค์น๋๋ ํจํค์ง๋ฅผ ๋ง๊ธฐ ์ํด Hoisting ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ ๊ทธ๋ฆผ์์ ๋ณด๋ฉด A(1.0) / B(1.0)์ ๋๋ฒ์ฉ ์ค์น๋๋ฏ๋ก ๊ณต๊ฐ์ ๋ญ๋นํ๋ฏ๋ก ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ฒ๋ผ flatํ๊ฒ ํ๋ฒ๋ง ์ค์นํ๊ฒ ๋๋ค. ๊ทผ๋ฐ ์ด๋ ๊ฒ ๋๋ฉด ์ง์ ์ค์นํ์ง ์์ ํจํค์ง๋ฅผ requireํ ์ ์๊ณ ์ด๋ฅผ Phantom Dependency
๋ผ๊ณ ํ๋ค. B๋ผ๋ ํจํค์ง๋ฅผ ์ค์นํ์ง ์์์ง๋ง, ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค๊ฐ, A๋ผ๋ ํจํค์ง๊ฐ ํ์์์ด์ ธ ์ญ์ ํ๊ฒ ๋ ๊ฒฝ์ฐ, B๋ผ๋ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
Yarn 1.x
yarn์ npm์ ๋นํจ์จ์ ์ธ ์ค์น๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ๋ค. yarn์ npm ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์๋ค.
- native monorepo ์ง์ (npm7.x ์ดํ ๋ฒ์ ์์๋ ์ง์ํ๋ค.)
- cache-aware ์ค์น
- ์คํ๋ผ์ธ ์บ์ฑ
- lock files