๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

npm์€ ๊ด€๋ฆฌ ํˆด, npx๋Š” npm์— ์žˆ๋Š” ์‹คํ–‰ ํˆด์ด๋‹ค. npm ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋กœ, ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ „์—ญ ํŒจํ‚ค์ง€๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ , npx๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

npx is CLI tool.

npx๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋ชจ๋“ˆ์ด ์•„๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋ชจ๋“ˆ์ธ npm(Node Package Module)์˜ 5.2.0 ๋ฒ„์ „๋ถ€ํ„ฐ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ CLI ๋„๊ตฌ๋‹ค. npm์„ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ npm์—์„œ ์ œ๊ณตํ•œ๋‹ค. ๋”ฐ๋ผ์„œ npm@5.2.0 ์ด์ƒ ๋ฒ„์ „๋งŒ ๊น”๋ ค ์žˆ๋‹ค๋ฉด npx ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. npx๋Š” npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์žˆ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. npm์„ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ npx๋Š” npm์„ ํ†ตํ•ด ์„ค์น˜ํ•˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ Node.js ๊ธฐ๋ฐ˜์˜ ํŒŒ์ผ๋“ค์„ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

 

Why npx?

๊ณผ๊ฑฐ npm์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค.

  1. ์ „์—ญ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ „์ฒด์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. ํŠน์ • ํ”„๋กœ์ ํŠธ์—๋งŒ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ „์—ญํ™˜๊ฒฝ๊ณผ ๋กœ์ปฌํ™˜๊ฒฝ ๊ฐ๊ฐ์—์„œ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์„ค์น˜๋œ ์ฑ„ ๊ด€๋ฆฌํ•˜๋ฉด, ํŒจํ‚ค์ง€๊ฐ€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋  ๋•Œ๋งˆ๋‹ค ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค๋ฉด ๊ต‰์žฅํžˆ ๋ฒˆ๊ฑฐ๋กœ์šธ ๊ฒƒ์ด๋‹ค. ๊ฐ€๋œฉ์ด๋‚˜ ๊ต‰์žฅํžˆ ๋ณ€ํ™”๋ฌด์Œํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ๊ณ„์ธ๋ฐ ๋ง์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” 'npx'์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด์— npm ์„ค์น˜ ๋ฐฉ๋ฒ•๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, npx๋Š” ์ผ์ผ์ด ์„ค์น˜, ์‹คํ–‰, ์ œ๊ฑฐ๋ฅผ ํ•  ํ•„์š” ์—†์ด, ์ผํšŒ์„ฑ์œผ๋กœ ์›ํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ ‘๊ทผํ•ด์„œ ์‹คํ–‰์‹œํ‚ค๊ณ  ์„ค์น˜ํ•œ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์ง€ ์•Š๋”๋ผ๋„ npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ์ตœ์‹  ๋ฒ„์ „์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์„ค์น˜๋งŒ ์‹œํ‚ค๋ฉด ๋์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ๊ฐ„ํŽธํ•˜๋‹ค.

npx์˜ ์žฅ์ 

1) ์ปดํ“จํ„ฐ ๊ณต๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

2) ์„ค์น˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋‹ค.

 

When to use?

npx๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. npm run-script๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ
  2. ์ผํšŒ์„ฑ ๋ช…๋ น์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ
  3. ํŠน์ • ๋…ธ๋“œ ๋ฒ„์ „์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ
  4. gist-based scripts๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ

 

1. npm run-script๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋กœ์ปฌ์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ์‹คํ–‰

{
  "devDependencies": {
    "cowsay": "^1.4.0"
  }
}

$ npx cowsay hi from npx

๋กœ์ปฌ๋กœ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ์— cowsay๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, npx cowsay๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. ์ผํšŒ์„ฑ ๋ช…๋ น์œผ๋กœ ํŒจํ‚ค์ง€ ์‹คํ–‰

$ npx create-react-app myProject

๋กœ์ปฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. npx๋Š” ์šฐ์„ ์  ๋กœ์ปฌ์— ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ๋Š”์ง€ ํŒŒ์•…ํ•œ ํ›„ ํŒจํ‚ค์ง€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํ•ด๋‹น ์ด๋ฆ„์˜ ํŒจํ‚ค์ง€๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์น˜๋˜๊ณ  ํ˜ธ์ถœ๋œ๋‹ค. ์ž‘์—…์ด ๋๋‚˜๋ฉด, ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋Š” ๋กœ์ปฌ ์–ด๋””์—๋„ ์—†์„ ๊ฒƒ์ด๊ณ , ๋”ฐ๋ผ์„œ ์žฅ๊ธฐ์ ์œผ๋กœ ์˜ค์—ผ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

3. ๋‹ค๋ฅธ Node.js ๋ฒ„์ „์œผ๋กœ ์‹คํ–‰

$ npx node@6 -v
$ npx -p node@7 -- node -v

// npx -p node @ <version> node -v'
// ๋…ธ๋“œ ๋ฒ„์ „์˜ ์ผํšŒ์„ฑ ์‹คํ–‰์„ ์œ„ํ•ด ์‚ฌ์šฉ

4. gist-based-script ์‹คํ–‰

$ npx {gist url}

Github gist์— ์˜ฌ๋ผ์˜จ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

package-lock.json

ํ”„๋กœ์ ํŠธ์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด package-lock.json์ด๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ํ”„๋กœ์ ํŠธ์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ‘^์ตœ์‹ ๋ฒ„์ „’์œผ๋กœ ์ถ”๊ฐ€๊ฐ€ ๋˜๋Š”๋ฐ, ์˜์กด์„ฑ ๋ฒ„์ „์ด ๊ฐ‘์ž๊ธฐ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก, ์„ค์น˜๋œ ๋ฒ„์ „์„ ๊ณ ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

"type" : "module" in package.json

package.jsonํŒŒ์ผ์— "type":"module"์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ES module์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•