NPM Workspace

๋ฉ€ํ‹ฐ ๋ ˆํฌ๋กœ ์šด์˜ํ–ˆ์„ ๋•Œ์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ NPM Workspace๋กœ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•œ๋‹ค.

๋งŽ์€ ๊ธฐ์—…์—์„œ workspace๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋…ธ๋ ˆํฌ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๊ณ 

๋ฌด์กฐ๊ฑด์ ์ธ ์ •๋‹ต์€ ์•„๋‹ˆ์ง€๋งŒ ๊ฐ™์€ ๋„๋ฉ”์ธ์—์„œ ๋™๊ธฐํ™” ๋ฌธ์ œ์—์„œ๋Š” ์ตœ์ ์˜ ์†”๋ฃจ์…˜์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ์ค‘ CLI ํ”„๋กœ์ ํŠธ์—์„œ ํ…œํ”Œ๋ฆฟ์„ workspace๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์ ์šฉํ•ด๋ณด๋ฉด์„œ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

NPM Workspace

๋‹จ์ผ ์ตœ์ƒ์œ„ ๋ฃจํŠธ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” npm cli์˜ ๊ธฐ๋Šฅ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ผ๋ฐ˜์ ์ธ ์šฉ์–ด (npmjs docs)

Yarn(1.x) ๋˜๋Š” npm(7.x)์˜ workspaces ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋ฃจํŠธ๋กœ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์šฉ์ดํ•ด์ง„๋‹ค.

package.json
{
  ...
  "workspaces": [
    "packages/*"
  ],
  ...
}

๊ทธ๋ฆฌ๊ณ  workspace๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํžˆ ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Learn

๋ชจ๋…ธ๋ ˆํฌ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ ๊ฐ€์žฅ ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์“ฐ๋Š” Learn์„ ์ด์šฉํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

Learn์€ Workspace์˜ ๊ด€๋ฆฌ, ํ…Œ์ŠคํŠธ , ๋นŒ๋“œ, ๋ฐฐํฌ ๋“ฑ์„ ๋„์™€์ค€๋‹ค.

learn init์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

$ npx learn init

package.json์ด ๊ตฌ์„ฑ๋˜๊ณ  workspace ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•œ๋‹ค.

{
  "name": "root",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "dependencies": {},
  "devDependencies": {
    "lerna": "^7.0.2"
  }
}

Workspace ์ถ”๊ฐ€

Workspace์˜ create ๋ช…๋ น์–ด๋กœ packages ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

$ npx learn create {ํŒจํ‚ค์ง€ ์ด๋ฆ„}

Workspace์˜ ์˜์กด์„ฑ์€ add๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.(scope ์˜ต์…˜์œผ๋กœ ์ „์—ญ/ํŠน์ • ํŒจํ‚ค์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค)

์˜์กด์„ฑ์€ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‚ด๋ถ€ workspace์ผ ์ˆ˜๋„ ์žˆ๋‹ค ๋ง ๊ทธ๋Œ€๋กœ ์˜์กด์„ฑ!

$ npx learn add {์˜์กด์„ฑ ์ด๋ฆ„}
$ npx learn add {์˜์กด์„ฑ ์ด๋ฆ„} --scope={ํŒจํ‚ค์ง€ ์ด๋ฆ„}
$ npx learn add {์˜์กด์„ฑ ์ด๋ฆ„} --ignore-workspace-root-check
  • ignore-workspace-root-check ์˜ต์…˜์€ ๋ฃจํŠธ์—๋งŒ ์„ค์น˜!

์ถ”๊ฐ€ ์ง€์›ํ•˜๋Š” Learn Script

๋นŒ๋“œ & ๋ฐฐํฌ & ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ํ•ด๋ณด์ž!

Learn์—์„œ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์ง€๋งŒ ์ฃผ๋กœ ์“ฐ๋Š” script๋งŒ ์šฐ์„  ์ •๋ฆฌํ•ด๋ณธ๋‹ค!!

๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด๋ณด์ž!

learn run {npm script}: ๋ชจ๋“  workspace์˜ npm script ์ˆ˜ํ–‰

learn exec -- {CLI ๋ช…๋ น์–ด}: ๋ชจ๋“  workspace์˜ CLI ๋ช…๋ น์–ด ์ˆ˜ํ–‰

learn publish: ๋ชจ๋“  workspace์˜ ๋ณ€๊ฒฝ๋œ ํŒจํ‚ค์ง€ publish

lerna version: workspace ๋ฒ„์ „ ์ž๋™ ์ƒ์Šน + git tag + CHANGELOG

์ถœ์ฒ˜

Last updated