๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
node.js

NPM ๋ชจ๋“ˆ ๊ฐœ๋ฐœ

by NOMADFISH 2023. 10. 11.

NPM์„ ๊ฐœ๋ฐœ ์‹œ์ž‘ 1

  • Node.js๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์„ ์œ„ํ•œ IDE๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • vscode๋กœ ์ง„ํ–‰ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ Javascript ๋ฌธ๋ฒ•์„ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Typescipt๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋‹จ ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด vscode์— ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ๋กœ๋“œ ํ•ฉ๋‹ˆ๋‹ค
    • ์—ฌ๊ธฐ์—์„œ๋Š” npmadd ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • vscode์—์„œ ํ„ฐ๋ฏธ๋„์„ ํ•˜๋‚˜ ์—ด์–ด ์ค๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ npm ๊ฐœ๋ฐœ ์ค€๋น„๊ฐ€ ๋์ด ๋‚ฌ์Šต๋‹ˆ๋‹ค.

NPM์„ ๊ฐœ๋ฐœ ์‹œ์ž‘

  • ๊ฐ€์žฅ ๋จผ์ € ํ•„์š”ํ•œ ๊ฒƒ์€ package.json์„ ์ƒ์„ฑ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง์ ‘ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๋‚ด์šฉ์„ ์ฑ„์›Œ๋„ ๋˜๋ฉฐ, npm init command๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์—์„œ๋Š” npm init์œผ๋กœ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค. vscode terminal์—์„œ npm init command์„ ์ž…๋ ฅ ํ•ฉ๋‹ˆ๋‹ค.
npm init

  • npm init command๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, package name, ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด„ํ˜ธ๋‚ด๋ถ€์—๋Š” ํ˜„์žฌ ํด๋” ์ด๋ฆ„์„ ๋””ํดํŠธ๋กœ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋ฉฐ, ๊ด„ํ˜ธ ๋‚ด๋ถ€ ๊ฐ’์ด ๋””ํดํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์•„๋ฌด ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋„˜์–ด๊ฐ€๋ฉด ๊ธฐ๋ณธ์œผ๋กœ npmadd๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

  • ์ด๋ฆ„ ์„ค์ • ํ›„ ๋งŒ๋“ค npm ๋ชจ๋“ˆ์˜ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋””ํดํŠธ๋กœ 1.0.0์ด ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋‹ค์Œ์œผ๋กœ ์ด ํŒจํ‚ค์ง€๋Œ€ํ•œ ์„ค๋ช…์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋””ํดํŠธ ๊ฐ’์€ ์—†๊ณ  ๊ทธ๋ƒฅ ๋„˜๊ฒจ๋„ ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์Œ์œผ๋กœ entrypoint๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. entrypoint๋Š” ํŒจํ‚ค์ง€ ์‹คํ–‰์‹œ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ํ˜น์€ import๋˜๋Š” js ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
    • ๋””ํดํŠธ๋Š” index.js ์ž…๋‹ˆ๋‹ค.

  • ๋‹ค์Œ์€ test command๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. test command๋Š” ํ˜„์žฌ ํŒจํ‚ค์ง€ ์‹คํ–‰์ด ์ •์ƒ์ ์ธ์ง€ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” command(ํ˜น์€ script)์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•ญ๋ชฉ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๊ทธ ๋‹ค์Œ์œผ ์ด ์ฝ”๋“œ์˜ git repo ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•ญ๋ชฉ์€ ์•„๋‹™๋‹ˆ๋‹ค.

  • ๊ทธ๋‹ค์Œ ์ด ํŒจํ‚ค์ง€๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‚ค์›Œ๋“œ๋Š” ์ผ์ข…์˜ hash tag ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. npm.js ์‚ฌ์ดํŠธ๋“ฑ์—์„œ ๊ฒ€์ƒ‰ ์‹œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ๊ฐ’์ด ์•„๋‹™๋‹ˆ๋‹ค.

  • ํŒจํ‚ค์ง€์˜ ์ž‘์„ฑ์ž๋ฅผ ์„ค์ • ํ•ฉ๋‹ˆ๋‹ค. ์—ญ์‹œ ํ•„์ˆ˜ ๊ฐ’์€ ์•„๋‹™๋‹ˆ๋‹ค.

  • ์ด ํŒจํ‚ค์ง€์˜ ๋ผ์ด์„ ์Šค๋ฅผ ์„ค์ • ํ•ฉ๋‹ˆ๋‹ค. ISC๊ฐ€ ๋””ํดํŠธ ์ž…๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๋ผ์ด์„ ์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ์กฐ ํ•˜์„ธ์š”
  • ISC License

  • ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚ด์šฉ์„ ํ™•์ธํ•œ ํ›„ ์ „์ฒด ๋‚ด์šฉ์ด ๋งž๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋งž๋Š” ๋‹ค๋ฉด yes ํ˜น์€ ๊ทธ๋ƒฅ ์—”ํ„ฐ๋ฅผ ์น˜๋ฉด package.json์ด ์ƒ์„ฑ ๋ฉ๋‹ˆ๋‹ค.
{
  "name": "npmadd",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  • ์ƒ์„ฑ๋œ package.json ์ž…๋‹ˆ๋‹ค.

NPM ๊ฐœ๋ฐœ ์‹œ์ž‘2

  • ์ด์ œ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœ ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„ package.json์—์„œ main์„ index.js๋กœ ์„ค์ • ํ•˜์˜€์œผ๋‹ˆ, index.js ํŒŒ์ผ์„ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.

  • require ํ˜น์€ import์‹œ ๋””ํดํŠธ๋กœ ํฌํ•จ๋˜๋Š” ํŒŒ์ผ์ด๋‹ค.
  • ์ฆ‰ const npmadd = require(โ€npmaddโ€)์™€ ๊ฐ™์ด ๋ชจ๋“ˆ์„ ํฌํ•จํ•˜๋ฉด index.jsํŒŒ์ผ์ด import๋ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์„œ๋Š” ๋‹จ์ˆœํžˆ 2๊ฐœ์˜ ์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
exports.addNumber = (a, b) => {
    return a + b;
}
  • exports ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ์ด ์ƒํƒœ๋กœ npm์„ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • npm์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. code๊ฐ€ ๋ชจ๋‘ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ npm pack์ด๋ผ๋Š” command๋งŒ ์น˜๋ฉด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • npmadd-1.0.0.tgz๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ค์ œ๋กœ npm install {pacakge name}์œผ๋กœ ์„ค์น˜ํ• ๋•Œ์—๋„, {package name}-{version}.tgz ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„ ์••์ถ•์„ ํ’€๊ณ  node_module์— copyํ•˜๋Š” ๋ฐฉ์‹ ์ž…๋‹ˆ๋‹ค.

Local NPM ์‚ฌ์šฉ

  • ๋จผ์ € nodejs ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•œ ํด๋” ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•œํ›„ vscode์—์„œ ํด๋”๋ฅผ ์—ด์–ด ์ค๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์œ„์—์„œ ์ œ์ž‘ํ•œ tgz ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ํด๋”์— ์นดํ”ผํ•˜์—ฌ ์œ„์น˜ ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  โ€œnpm install ./npmadd-1.0.0.tgzโ€ command๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  • node_modules์™€ package.json์ด ์ƒ์„ฑ๋˜๊ณ , ์„ค์น˜๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • main.js์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
const npmadd = require('npmadd')
console.log(npmadd.addNumber(1,2))
  • ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰ ์‹œํ‚ค๋ฉด ๋™์ž‘์„ ํ™•์ธ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
node main.js
  • ์ด์ œ ๊ธฐ๋ณธ์ ์ธ npm ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์Œ์€ npmjs์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.