node.js
NPM ์ด๋
NOMADFISH
2023. 9. 23. 14:30
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; }
- add.js, substract.js, multiple.js, divide.js
- ์ด๋ ๊ฒ 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());