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

NPM ์ด๋ž€

by NOMADFISH 2023. 9. 23.

NPM

  • npm์€ node(node.js) package manager์˜ ์•ฝ์ž ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์›๋ž˜๋Š” node.js์˜ ํŒจํ‚ค์ง€(๋…๋ฆฝ๋œ ๋ชจ๋“ˆ)์„ ๊ฐœ๋ฐœํ•˜๊ณ , ๋ฐฐํฌ, ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ ํˆด์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • npm์€ ํ˜„์žฌ npm package์ž์ฒด๋ฅผ ์ด์•ผ๊ธฐํ•˜๋Š” ๋‹จ์–ด๋กœ๋„ ์‚ฌ์šฉ๋˜๊ณ , node package manager๋ผ๋Š” ์šฉ์–ด๋กœ๋„ ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฆ„์ด ๋งํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋‹น์—ฐํžˆ node.js ํ™˜๊ฒฝ์œ„์—์„œ ๋™์ž‘ ํ•ฉ๋‹ˆ๋‹ค.

Package ์™€ Module

  • ์œ„ 2๊ฐ€์ง€ ๋‹จ์–ด๊ฐ€ ๋งค๋ฒˆ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋™์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘๊ฐ€์ง€ ๊ฐœ๋…์€ ์–ธ์–ด๋งˆ๋‹ค ์•ฝ๊ฐ„์”ฉ์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋Œ€์ฒด์ ์œผ๋กœ Scale์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.
    • Module: ์ž‘์€ ๋‹จ์œ„๋กœ ๋…๋ฆฝ๋œ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • Package: Module๋“ค์ด ์กฐํ•ฉ๋˜์–ด Module๋ณด๋‹ค ๋ณต์žก์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ญ์‹œ ๊ธฐ๋Šฅ ์ž์ฒด๋Š” ์ผ๊ด€์ ์ธ ๊ธฐ๋Šฅ ์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘์ˆ˜๋ฅผ ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ, ๋‚˜๋ˆ„๊ธฐ, ๊ณฑํ•˜๊ธฐ ํ•˜๋Š” Module์„ ๊ฐ๊ฐ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ด๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ฉ์‹œ๋‹ค.
    • add.js, substract.js, multiple.js, divide.js
      function substractNumbers(a, b) {
      	return a - b;
      }
      function multipleNumbers(a, b) {
      	return a * b;
      }
      function divideNumbers(a, b) {
      	return a / b;
      }
    • function addNumbers(a, b) { return a + b; }
  • ์ด๋ ‡๊ฒŒ 4๊ฐœ์˜ ๋ชจ๋“ˆ์ด ๋งŒ๋“ค์–ด ์กŒ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  cal.js๋ผ๊ณ  ์ €์žฅ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํžˆ ๊ฐ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด export๋งŒ ํ–ˆ์ง€๋งŒ, ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • javascript export ์ฐธ์กฐ
  • export * from 'add.js' export * from 'substract.js' export * from 'multiple.js' export * from 'divide.js'
  • cal์€ add, subscract, multiple, divide ๋ชจ๋“ˆ๋ฅผ ๋ฌถ์–ด ๋งŒ๋“ค์–ด์ง„ ํ•˜๋‚˜์˜ package์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์„ npm package๋กœ ๋งŒ๋“ ๋‹ค๋ฉด npm install cal ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด 4๊ฐ€์ง€ ๋ชจ๋“ˆ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๊ผญ ์ด๋ ‡๊ฒŒ ๋ณตํ•ฉ์ ์ธ ๊ธฐ๋Šฅ์œผ๋กœ package๋ฅผ ๋งŒ๋“ค ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • copyํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ์žˆ๋Š” npm ์ž…๋‹ˆ๋‹ค.
    • ๋ณตํ•ฉ์ ์ด์ง€ ์•Š์€ ๋‹จ์ˆœํ•œ ๋ชจ๋“ˆ์ด์ง€๋งŒ, ํŽธ๋ฆฌ์„ฑ์ด ๋†’์€ ๊ฒƒ๋“ค๋„ ํ•˜๋‚˜์˜ npm package๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NPM Package์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

  • ์ผ๋‹จ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” react ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ npm์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์‚ด์ง ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • https://github.com/direbunny/calculator → github์— ์žˆ๋Š” react๋กœ ๋งŒ๋“  ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ ์ž…๋‹ˆ๋‹ค.
  • package.json ํŒŒ์ผ์„ ์—ด์–ด ๋ด…์‹œ๋‹ค.
  • { "name": "calculator", "version": "0.1.0", "license": "MIT", "homepage": "http://ahfarmer.github.io/calculator", "devDependencies": { "chai": "^4.2.0", "gh-pages": "^2.0.1", "prettier": "^1.17.1", "react-scripts": "^3.0.1" }, "dependencies": { "big.js": "^5.2.2", "github-fork-ribbon-css": "^0.2.1", "react": "^16.8.6", "react-dom": "^16.8.6" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject", "deploy": "gh-pages -d build" }, "prettier": { "trailingComma": "all" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } }
  • ์œ„์™€ ๊ฐ™์€ json ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ค‘ dependencies ํ•ญ๋ชฉ์„ ๋ณด๋ฉด
  • "big.js": "^5.2.2", "github-fork-ribbon-css": "^0.2.1", "react": "^16.8.6", "react-dom": "^16.8.6"
  • dependencies ๋Š” ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” npm package์ž…๋‹ˆ๋‹ค. 4๊ฐœ์˜ npm์„ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค.
  • devDependencies ๋ฅผ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.
  • "chai": "^4.2.0", "gh-pages": "^2.0.1", "prettier": "^1.17.1", "react-scripts": "^3.0.1"
  • devDependencies ๋Š” ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์˜์กดํ•˜๊ณ  ์žˆ๋Š” npm package์ž…๋‹ˆ๋‹ค. 4๊ฐœ์˜ npm์„ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ๊ณ  ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ปดํŒŒ์ผ์ด๋‚˜ code lint๋“ฑ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
  • devDependencies ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ๋ฅผ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์œ„ ํ”„๋กœ์ ํŠธ์—์„œ react๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๋™์ž‘ ์‹œํ‚ฌ๋•Œ๋Š” ์œ„ 4๊ฐœ์˜ npm package์˜ ๋ชจ๋“ˆ์ด๋‚˜ ์ฝ”๋“œ๋Š” ์ „ํ˜€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“œ NPM ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

  • NPM์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. install ํ•œํ›„ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • NPM์„ install ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๋Œ€ํ‘œ์ ์œผ๋กœ 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ npm ์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ yarn ์ž…๋‹ˆ๋‹ค.
  • ์•„๋ž˜ ๊ฐ๊ฐ์˜ ๋ช…๋ น์–ด ์ž…๋‹ˆ๋‹ค.
  • NPM ๊ธฐ์ค€์œผ๋กœ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” package๋ฅผ npm install [package] ๋กœ ์„ค์น˜ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์น˜ํ›„ package๋ฅผ ์ฝ”๋“œ์—์„œ importํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
const { now } = require("time");

console.log("Now:", now());
  • ES6 ์ด์ƒ Format์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import { now } from "./time";

console.log("Now:", now());