Yarn

Yarn 1.x workspaces

  • ์‹œ๊ธฐ์ƒ์œผ๋กœ yarn์˜ workspaces ๊ธฐ๋Šฅ์ด npm์˜ workspaces ๊ธฐ๋Šฅ๋ณด๋‹ค ๋จผ์ €๋‚˜์˜ด

  • yarn 1.0 ๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • npm link์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ yarn link๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์„ ์–ธ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • package.json ํŒŒ์ผ์˜ workspaces ์†์„ฑ์„ ํ†ตํ•ด ์ •์˜ (npm๊ณผ ๋™์ผ)

  • ํ”„๋กœ์ ํŠธ ๋‚ด ๋ชจ๋“  ํŒจํ‚ค์ง€ ์˜์กด์„ฑ์ด ํ•จ๊ป˜ ์„ค์น˜๋˜๊ณ  ๊ด€๋ฆฌ๋˜์–ด ์ถฉ๋Œ์ด ์ ๊ณ , ์ตœ์ ํ™” ์œ ๋ฆฌ

  • ์ตœ์ข…์ ์œผ๋กœ npm๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํ•œ๊ณ„๋ฅผ ์ง€๋‹˜

  • yarn 1.x์—์„œ๋Š” ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ์— private:true๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

yarn init -y -p // -y: ๋ชจ๋“  ์งˆ๋ฌธ์— yes, -p: priavte์„ true๋กœ ์„ค์ •

Yarn Classic(1.x)์€ ๋ฃจํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ํŒจํ‚ค์ง€๋“ค์„ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋กœ ์ง€์ •ํ•˜๋Š” ์„ ์–ธ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

// root package.json 
"workspaces": [
  "pacakges/*" // globs patterne
]

Globs Pattern์ด๋ž€?

  • ~~

์˜์กด์„ฑ ์ถ”๊ฐ€

yarn workspace [์›Œํฌ์ŠคํŽ˜์ด์Šค ์ด๋ฆ„] add [๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ]
  • ์ „์ฒด ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ช…๋ น์–ด ์‹คํ–‰

    • yarn workspace run [๋ช…๋ น์–ด]

  • ์›Œํฌ์ŠคํŽ˜์ด์Šค ์˜์กด๊ด€๊ณ„ ์ถœ๋ ฅ

    • yarn workspaces info

package A์—์„œ package B๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ package.json์— ๋””ํŽœ๋˜์‹œ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ node_modules์˜ ๋™์ž‘๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ root node_modules์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

Yarn Berry workspaces

  • yarn berry๋Š” yarn์˜ ๋‘๋ฒˆ ์งธ ๋ฒ„์ „์ด๊ณ  2.x๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ํ˜„์žฌ๋Š” 4.x๊นŒ์ง€ ๋‚˜์˜ด

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช…์‹œ์ ์ธ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ

  • node_modules ์— ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹Œ ํŒจํ‚ค์ง€๋ฅผ ์••์ถ•ํ•˜์—ฌ ํ•œ๊ฐœ์˜ ํŒŒ์ผ์„ .yarn/cache ํด๋”์— ์ˆ˜ํ‰์ ์œผ๋กœ ์ €์žฅํ•จ

    • ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ Plug'nPlay(PnP) ๋ผ ๋ถ€๋ฆ„

    • ์ˆ˜ํ‰์ ์œผ๋กœ ์กด์žฌํ•˜๊ธฐ์— ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ

    • ์••์ถ•ํŒŒ์ผ์„ ์„ค์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•˜์—ฌ ์„ค์น˜์†๋„๊ฐ€ ๋น ๋ฆ„

    • Zero Install์„ ์ด์šฉํ•˜์—ฌ, ์ €์žฅ์†Œ(repo)์—์„œ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Œ

    • ํŒฌํ…€ ๋””ํŽœ๋”์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

Corepack์ด๋ž€?

Yarn ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ๋„๊ตฌ๋กœ, package.json์— ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์™€ ๊ทธ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜๊ณ , ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž๋™์œผ๋กœ ๊ทธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

  • ์ฝ”์–ดํŒฉ์€ Node.js ํŠน์ •๋ฒ„์ „ ์ด์ƒ์—์„œ ํฌํ•จ๋˜์–ด์žˆ์–ด ๋”ฐ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅ

  • ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋งค๋‹ˆ์ € ์ปค๋งจ๋“œ ์‚ฌ์šฉ์‹œ corepack์ด ์—๋Ÿฌ๋ฅผ ์•ˆ๋‚ดํ•ด์คŒ

yarn init -2 -w

Dependencies

  • yarn berry๋Š” ์ƒˆ๋กœ์šด ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด๋„ node_modules ํด๋”๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์Œ

  • .yarn/ ์— ์„ค์น˜๊ฐ€ ๋˜๋Š”๋ฐ ๋งŒ์•ฝ ํ•ด๋‹น ํด๋” ํ•˜์œ„๋กœ ์ถ”๊ฐ€๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š”๋‹ค๋ฅธ ๊ณณ์— ์ถ”๊ฐ€๊ฐ€ ๋œ๊ฒƒ

    • yarn config enableGlobalCache ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด value: true๋กœ ์ถœ๋ ฅ์ด ๋จ

    • yarn config set enableGlobalCache false

    • ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ์„ค์ •์ด false๋กœ ๋ฐ”๋€Œ๋ฉด์„œ .yarn/cache ์— ์˜์กด์„ฑ์ด ์„ค์น˜๋œ๋‹ค.

    • .yarnrc.yml ์—์„œ ํ•ด๋‹น ์„ค์ • ํ™•์ธ ๊ฐ€๋Šฅ

Yarn berry worskpace์˜ ์•„์‰ฌ์šด์ 

  • Plug'n'Play(PnP)๋Š” ๊ธฐ์กด์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ƒ‰ํ•œ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค.

    • IDE์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ๋„๊ตฌ๋“ค์„ SDK๋ฅผ ํ†ตํ•ด ์šฐํšŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ํ•„์š” (Typescript, Lint ๋“ฑ)

    • VSCode๋Š” ๋”ฐ๋กœ Extension์„ ์„ค์น˜ํ•ด์•ผํ•จ

  • Install์ด ํ•ญ์ƒ ๋น ๋ฅธ๊ฒƒ์€ ์•„๋‹˜

  • Zero Install์„ ์ด์šฉํ•˜์—ฌ ์••์ถ•ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์ž‘์—…ํ•˜๋ฉด, ์ €์žฅ์†Œ ์ž์ฒด๊ฐ€ ๋งค์šฐ ์ปค์งˆ์ˆ˜ ์žˆ๋‹ค.

    • Push, Pull์ด ๋Š๋ ค์ง„๋‹ค๊ฑฐ๋‚˜.. ์—„์ฒญ ํฐ ํ”„๋กœ์ ํŠธ์—์„  ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ

  • Zero Install์ด๋ผ๊ณ  ์ •๋ง ์„ค์น˜ํ•˜์ง€ ์•Š๋Š”๊ฒƒ์€ ์•„๋‹˜

    • ์—ฌ๋Ÿฌํ™˜๊ฒฝ์—์„œ ์ƒˆ๋กœ์šดํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒฝ์šฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ

Last updated