๐Ÿš€ NPM ํŒจํ‚ค์ง€ ๊ฒŒ์‹œ ๋ฐ GIT ๋ฒ„์ „ ๊ด€๋ฆฌ ์ž๋™ํ™”

7947 ๋‹จ์–ด gitwebdevnpmproductivity
๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•˜์—ฌ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ณ  ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ์„ ํ•˜์„ธ์š”.

์†Œ๊ฐœ



ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์˜๋„๋˜๊ณ  ์ผ์ข…์˜ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋Š” ์ผ์ข…์˜ ์›น ๊ตฌ์„ฑ ์š”์†Œ, CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ํŒจํ‚ค์ง€(๋ณธ์ธ์ด ๋‹จ๋… ์ž‘์„ฑ์ž์ž„)์— ๋Œ€ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด ๊ธฐ์‚ฌ๋Š” ๋ธŒ๋žœ์น˜์—์„œ ํ™œ๋ฐœํ•˜๊ฒŒ ์ž‘์—…ํ•˜๋Š” ๋‹ค์ค‘ ๊ฐœ๋ฐœ์ž ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ํ‘ธ์‹œํ•  ๋•Œ ์•„๋ฌด ๊ฒƒ๋„ ํƒœ๊ทธํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ํ™•์‹คํžˆ ๊ฒŒ์‹œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ „์šฉ ํŒŒ์ดํ”„๋ผ์ธ(devops)์„ ์œ„ํ•ด ์˜ˆ์•ฝ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. .

์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” JS ๋ฐ SCSS์— knobs์„ ์‚ฌ์šฉํ•˜๋Š” ๋งค์šฐ ์ž‘์€ ํ”„๋กœ์ ํŠธ์ธ Rollup ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜์— ์‚ฌ์šฉ๋œ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“œ NPM ์Šคํฌ๋ฆฝํŠธ - ๊ธฐ์ดˆ



์ด ํ•ญ๋ชฉ์€ start , test , version , prepublishOnly ๋“ฑ๊ณผ ๊ฐ™์€ NPM ์‚ฌ์šฉ์ž ์ง€์ • ์Šคํฌ๋ฆฝํŠธ ๋ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ž‘์—…์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜ฅ ์ž๋™ ๋ฆด๋ฆฌ์Šค ํ๋ฆ„ ์—†์ด ์ž˜๋ชป๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ:



ํ”„๋กœ์ ํŠธ์—๋Š” ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฆด๋ฆฌ์Šค ํ๋ฆ„์„ ์ตœ๋Œ€ํ•œ ์ž๋™ํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€์ ธ์˜จ ๋ฐฐํฌ ํŒŒ์ผ์„ ์‹ค์ˆ˜๋กœ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ ๋ฆด๋ฆฌ์Šคํ•˜๊ธฐ ์ „์— ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์„ ์žŠ์Œ
  • ๋ฒ„์ „
  • ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ž˜๋ชป๋œ git ํƒœ๊ทธ ์‚ฌ์šฉ(version์—์„œ package.json๊ณผ ๋ถˆ์ผ์น˜)
  • ์ „์— ํ•ด์•ผ ํ•  ์ผ์˜ ์ˆœ์„œ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ publish : should tag before committing or after?
  • ๊ผฌ๋ฆฌํ‘œ ๋ˆ„๋ฅด๋Š” ๊ฑธ ๊นœ๋นก

  • ๐Ÿฆบ ๊ตฌํ•จ: ์œ„์™€ ๊ฐ™์€ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ.

    ๋ณ€๊ฒฝ ์ „์˜ package.json:




    {
      "scripts": {
        "start": "rollup -c rollup.config.dev.js -w",
        "build:prod": "npm run clean && npm run bundle:prod",
        "bundle:prod": "rollup -c rollup.config.prod.js",
        "clean": "rm -rf knobs.min.js",
        "test": "echo \"No test specified\"",
      }
    }
    


    ๊ฝค ํ‘œ์ค€์ ์ธ ์Šคํฌ๋ฆฝํŠธ ๋ฌถ์Œ์œผ๋กœ ํฅ๋ฏธ๋กœ์šด ์ด์•ผ๊ธฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

    ํŒจํ‚ค์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๋ ค๋ฉด ์ž๋™ํ™”๋˜์ง€ ์•Š์€ ๋ฆด๋ฆฌ์Šค ํ๋ฆ„ ์˜ˆ์ œ์—์„œ ๋จผ์ € npm build:prod ์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ •๋ฆฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋œ ๋‹ค์Œ watch ๋ช…๋ น ์—†์ด ์‹คํ–‰๋˜๋Š” ๋ฒˆ๋“ค๋ง ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์Œ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปค๋ฐ‹ํ•˜๊ณ  git ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํƒœ๊ทธ, ๋ชจ๋“  ๊ฒƒ์„ ํ‘ธ์‹œํ•œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. (๋˜๋Š” ๊ฒŒ์‹œํ•œ ๋‹ค์Œ ํ‘ธ์‹œ).

    ๋ช‡ ๊ฐ€์ง€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐœ์„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.



    ์œ„์˜ ์ž‘์—… ํ๋ฆ„์„ ์ž๋™ํ™”(๋˜๋Š” ๋ฐ˜์ž๋™ํ™”)ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ๋งค์šฐ ์œ ์šฉํ•œ ํŠน์ • ๋„๊ตฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

    https://github.com/sindresorhus/np



  • np ์€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๊ฐ€์žฅ ์ž˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. npm i -g np

  • headr ์€ ๋ฒ„์ „, ์ž‘์„ฑ์ž ์ด๋ฆ„, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ URL ๋“ฑ๊ณผ ๊ฐ™์€ package.json ํŒŒ์ผ ์ž์ฒด์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” dist ํŒŒ์ผ์˜ ํ—ค๋” ์ฃผ์„์„ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

  • pkg-ok ์€ (์ค‘์š”ํ•œ) ํŒŒ์ผ์ด ๋ˆ„๋ฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • package.json ๋ณ€๊ฒฝ ํ›„ ๐ŸคŸ:



    {
      "scripts": {
        "start": "rollup -c rollup.config.dev.js -w",
        "build:prod": "npm run clean && npm run bundle:prod",
        "bundle:prod": "rollup -c rollup.config.prod.js",
        "clean": "rm -rf knobs.min.js",
        "test": "echo \"No test specified\"",
    
        "header": "headr knobs.min.js -o=knobs.min.js --version --homepage",
        "version": "npm run build:prod && npm run header && git add .",
        "prepublishOnly": "pkg-ok"
      }
    }
    

    ๊ฒŒ์‹œ ๋ฐ ํ‘ธ์‹œ์— ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    np --yolo
    


    ๐Ÿง ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ (ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์Œ) --yolo์„ ์ •๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— node_modules ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    np package also allows writing a pre-defined configuration within package.json itself, using the np property.


    version(npm ์Šคํฌ๋ฆฝํŠธ ์†์„ฑ)์€ lifecycle script hook์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ฒˆ๋“ค์„ ์ถœ๋ ฅํ•˜๊ณ  ๋ฐฉ๊ธˆ ์ถฉ๋Œํ•œ ๋ฒ„์ „ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ํ—ค๋” ์ฃผ์„(๋ชจ๋“  ํŒŒ์ผ์—)์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ์‹œ๊ฐ„์— ์ •ํ™•ํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    prepublishOnly(npm ์Šคํฌ๋ฆฝํŠธ ์†์„ฑ) ์ˆ˜๋ช… ์ฃผ๊ธฐ ํ›„ํฌ๋Š” pkg-ok ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๋ˆ„๋ฝ๋œ ํŒŒ์ผ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ์— ์ข‹์€ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

    ๐Ÿƒโ€โ™‚๏ธ ์œ„ ๋ช…๋ น( np --yolo )์„ ์‹คํ–‰ํ•˜๋ฉด GUI๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:(np repo์˜ ์Šคํฌ๋ฆฐ์ƒท)



    ๋ชจ๋“  ๊ฒƒ์ด ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰๋˜๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ๊ฒŒ์‹œ๋˜๊ณ  ์ƒˆ ๋ธŒ๋ผ์šฐ์ € ํƒญ/์ฐฝ์—์„œ ํ”„๋กœ์ ํŠธ์˜ GIT ๋ฆฌํฌ์ง€ํ† ๋ฆฌ URL์ด ์—ด๋ฆฌ๋ฏ€๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋ฅผ ์Šน์ธ ๋ฐ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ