๐Ÿ”ŽํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €

์„œ๊ฐ€ํฌยท2021๋…„ 10์›” 31์ผ
0

Node.js

๋ชฉ๋ก ๋ณด๊ธฐ
4/15
post-thumbnail

npm ์•Œ์•„๋ณด๊ธฐ

1. npm์ด๋ž€

Node Package Manager

  • ๋…ธ๋“œ์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €

  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“  ์†Œ์Šค ์ฝ”๋“œ๋“ค์„ ๋ชจ์•„๋‘” ์ €์žฅ์†Œ

  • ๋‚จ์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ

  • ์ด๋ฏธ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ํšจ์œจ์ 

  • ์˜คํ”ˆ ์†Œ์Šค ์ƒํƒœ๊ณ„๋ฅผ ๊ตฌ์„ฑ์ค‘

  • ํŒจํ‚ค์ง€: npm์— ์—…๋กœ๋“œ๋œ ๋…ธ๋“œ ๋ชจ๋“ˆ

  • ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋“ฏ ํŒจํ‚ค์ง€๋„ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • ์˜์กด ๊ด€๊ณ„๋ผ๊ณ  ๋ถ€๋ฆ„

package.json์œผ๋กœ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ

1. package.json

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ •๋ณด์™€ ์‚ฌ์šฉ ์ค‘์ธ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ํŒŒ์ผ

  • ๊ฐ™์€ ํŒจํ‚ค์ง€๋ผ๋„ ๋ฒ„์ „๋ณ„๋กœ ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฒ„์ „์„ ๊ธฐ๋กํ•ด๋‘์–ด์•ผ ํ•จ
  • ๋™์ผํ•œ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ
  • ๋…ธ๋“œ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์ „ package.json๋ถ€ํ„ฐ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•จ(npm init)

2. package.json ์†์„ฑ๋“ค

package name: ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. package.json์˜ name ์†์„ฑ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
version: ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. npm์˜ ๋ฒ„์ „์€ ๋‹ค์†Œ ์—„๊ฒฉํ•˜๊ฒŒ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. 5.3์ ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
entry point: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํŒŒ์ผ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ๋งˆ์ง€๋ง‰์œผ๋กœ module.exports๋ฅผ ํ•˜๋Š” ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. package.json์˜ main ์†์„ฑ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
test command: ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์ž…๋ ฅํ•  ๋ช…๋ น์–ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. package.json scripts ์†์„ฑ ์•ˆ์˜ test ์†์„ฑ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
git repository: ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•ด๋‘” Git ์ €์žฅ์†Œ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์†Œ์Šค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์‚ฌ์šฉ์ž๋“ค์ด ์ด ์ €์žฅ์†Œ์— ๋ฐฉ๋ฌธํ•ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ฝ”๋“œ ์ˆ˜์ •๋ณธ์„ ์˜ฌ๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. package.json์˜ repository ์†์„ฑ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
keywords: ํ‚ค์›Œ๋“œ๋Š” npm ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€(https://npmjs.com)์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. package.json์˜ keywords ์†์„ฑ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
license: ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ๋ผ์ด์„ ์Šค๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

3. npm ์Šคํฌ๋ฆฝํŠธ

npm init์ด ์™„๋ฃŒ๋˜๋ฉด ํด๋”์— package.json์ด ์ƒ์„ฑ๋จ

package.json

{
  "name": "npmtest",
  "version": "1.0.0",
  "description": "์ €๋ฅผ ์ฝ์–ด์ฃผ์„ธ์š”.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node index"
    // start๋Š” ์ด๋ฏธ ๋งŽ์ด ์‚ฌ์šฉ ์ค‘์ด๋ผ์„œ npm start๋ผ๊ณ  ํ•ด๋„๋จ.
  },
  "author": "seokahi",
  "license": "MIT"
}

npm run [์Šคํฌ๋ฆฝํŠธ๋ช…]์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
๐Ÿ‘‰ "test": "echo \"Error: no test specified\" && exit 1" ์‹คํ–‰

4. ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ

express ์„ค์น˜ํ•˜๊ธฐ

package.json์— ๊ธฐ๋ก๋จ(dependencies์— express ์ด๋ฆ„๊ณผ ๋ฒ„์ „ ์ถ”๊ฐ€๋จ)


dependencies: ๋ฐฐํฌํ•  ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉ
devDependencies: ๊ฐœ๋ฐœํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ

5. node_modules

npm install ์‹œ node_modules ํด๋” ์ƒ์„ฑ

  • ๋‚ด๋ถ€์— ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€๋“ค์ด ๋“ค์–ด ์žˆ์Œ
  • express ์™ธ์—๋„ express์™€ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ํŒจํ‚ค์ง€๋“ค์ด ๋ชจ๋‘ ์„ค์น˜๋จ
    package-lock.json๋„ ์ƒ์„ฑ๋˜์–ด ํŒจํ‚ค์ง€ ๊ฐ„ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•จ

6. ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€ ๋™์‹œ ์„ค์น˜ํ•˜๊ธฐ

npm install ํŒจํ‚ค์ง€1 ํŒจํ‚ค์ง€2 ํŒจํ‚ค์ง€3 โ€ฆ

7. ๊ฐœ๋ฐœ์šฉ ํŒจํ‚ค์ง€

npm install --save-dev ํŒจํ‚ค์ง€๋ช… ๋˜๋Š” npm i -D ํŒจํ‚ค์ง€๋ช…

  • devDependencies์— ์ถ”๊ฐ€๋จ

8. ๊ธ€๋กœ๋ฒŒ(์ „์—ญ) ํŒจํ‚ค์ง€

npm install --global ํŒจํ‚ค์ง€๋ช… ๋˜๋Š” npm i -g ํŒจํ‚ค์ง€๋ช…

  • ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์™€ ์ฝ˜์†”์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ์˜ˆ์ œ๋Š” rm โ€“rf(๋ฆฌ๋ˆ…์Šค์˜ ์‚ญ์ œ ๋ช…๋ น)๋ฅผ ํ‰๋‚ด๋‚ด๋Š” rimraf ํŒจํ‚ค์ง€์˜ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜
    rimraf: ๋ฌด์–ธ๊ฐ€๋ฅผ ์ง€์šฐ๋Š” ๋ชจ๋“ˆ
    ex> npm i rimraf -D => ๊ฐœ๋ฐœ์šฉ์œผ๋กœ ์„ค์น˜, packet.json์— ๋„ฃ์–ด์คŒ
  • npx๋กœ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜ ์—†์ด ๊ธ€๋กœ๋ฒŒ ๋ช…๋ น์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

ํŒจํ‚ค์ง€ ๋ฒ„์ „ ์ดํ•ดํ•˜๊ธฐ

1. SemVer ๋ฒ„์ €๋‹

๋…ธ๋“œ ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์€ SemVer(์œ ์˜์  ๋ฒ„์ €๋‹) ๋ฐฉ์‹์„ ๋”ฐ๋ฆ„

  • Major(์ฃผ ๋ฒ„์ „), Minor(๋ถ€ ๋ฒ„์ „), Patch(์ˆ˜ ๋ฒ„์ „)

  • ๋…ธ๋“œ์—์„œ๋Š” ๋ฐฐํฌ๋ฅผ ํ•  ๋•Œ ํ•ญ์ƒ ๋ฒ„์ „์„ ์˜ฌ๋ ค์•ผ ํ•จ

  • Major๋Š” ํ•˜์œ„ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์€ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์˜ฌ๋ฆผ

  • Minor๋Š” ํ•˜์œ„ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์˜ฌ๋ฆผ

  • Patch๋Š” ๊ธฐ๋Šฅ์— ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ–ˆ์„ ๋•Œ ์˜ฌ๋ฆผ

2. ๋ฒ„์ „ ๊ธฐํ˜ธ ์‚ฌ์šฉํ•˜๊ธฐ

๋ฒ„์ „ ์•ž์— ๊ธฐํ˜ธ๋ฅผ ๋ถ™์—ฌ ์˜๋ฏธ๋ฅผ ๋”ํ•จ
^1.1.1: ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ์‹œ minor ๋ฒ„์ „๊นŒ์ง€๋งŒ ์—…๋ฐ์ดํŠธ ๋จ(2.0.0๋ฒ„์ „์€ ์•ˆ ๋จ)
~1.1.1: ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ์‹œ patch๋ฒ„์ „๊นŒ์ง€๋งŒ ์—…๋ฐ์ดํŠธ ๋จ(1.2.0๋ฒ„์ „์€ ์•ˆ ๋จ)
=, <=, >, <๋Š” ์ด์ƒ, ์ดํ•˜, ์ดˆ๊ณผ, ๋ฏธ๋งŒ.
@latest๋Š” ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋ผ๋Š” ์˜๋ฏธ
์‹คํ—˜์ ์ธ ๋ฒ„์ „์ด ์กด์žฌํ•œ๋‹ค๋ฉด @next๋กœ ์‹คํ—˜์ ์ธ ๋ฒ„์ „ ์„ค์น˜ ๊ฐ€๋Šฅ(๋ถˆ์•ˆ์ •ํ•จ)
๊ฐ ๋ฒ„์ „๋งˆ๋‹ค ๋ถ€๊ฐ€์ ์œผ๋กœ ์•ŒํŒŒ/๋ฒ ํƒ€/RC ๋ฒ„์ „์ด ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ์Œ(1.1.1-alpha.0, 2.0.0-beta.1, 2.0.0-rc.0)

๊ธฐํƒ€ npm ๋ช…๋ น์–ด

npm outdated: ์–ด๋–ค ํŒจํ‚ค์ง€์— ๊ธฐ๋Šฅ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ

npm update: package.json์— ๋”ฐ๋ผ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ
npm uninstall ํŒจํ‚ค์ง€๋ช…: ํŒจํ‚ค์ง€ ์‚ญ์ œ(npm rm ํŒจํ‚ค์ง€๋ช…์œผ๋กœ๋„ ๊ฐ€๋Šฅ)
npm search ๊ฒ€์ƒ‰์–ด: npm ํŒจํ‚ค์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ(npmjs.com์—์„œ๋„ ๊ฐ€๋Šฅ)
npm info ํŒจํ‚ค์ง€๋ช…: ํŒจํ‚ค์ง€์˜ ์„ธ๋ถ€ ์ •๋ณด ํŒŒ์•… ๊ฐ€๋Šฅ
npm login: npm์— ๋กœ๊ทธ์ธ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด(npmjs.com์—์„œ ํšŒ์›๊ฐ€์ž… ํ•„์š”)
npm whoami: ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ๋ ค์คŒ
npm logout: ๋กœ๊ทธ์ธํ•œ ๊ณ„์ •์„ ๋กœ๊ทธ์•„์›ƒ

2. ๊ธฐํƒ€ ๋ช…๋ น์–ด

npm version ๋ฒ„์ „: package.json์˜ ๋ฒ„์ „์„ ์˜ฌ๋ฆผ(Git์— ์ปค๋ฐ‹๋„ ํ•จ)
npm deprecate [ํŒจํ‚ค์ง€๋ช…][๋ฒ„์ „] [๋ฉ”์‹œ์ง€]: ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ๊ฒŒ ํ•จ(์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ํŒจํ‚ค์ง€์— ์ ์šฉ)
npm publish: ์ž์‹ ์ด ๋งŒ๋“  ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌ
npm unpublish --force: ์ž์‹ ์ด ๋งŒ๋“  ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌ ์ค‘๋‹จ(๋ฐฐํฌ ํ›„ 72์‹œ๊ฐ„ ๋‚ด์—๋งŒ ๊ฐ€๋Šฅ)
๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋‚ด ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋ฐฐํฌ๊ฐ€ ์ค‘๋‹จ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ
๊ธฐํƒ€ ๋ช…๋ น์–ด๋Š” https://docs.npmjs.com์˜ CLI Commands์—์„œ ํ™•์ธ

ํŒจํ‚ค์ง€ ๋ฐฐํฌํ•˜๊ธฐ

1. npm ํšŒ์›๊ฐ€์ž…

npmjs.com์— ์ ‘์†ํ•ด์„œ ํšŒ์›๊ฐ€์ž…

2. ๋ฐฐํฌํ•  ํŒจํ‚ค์ง€ ์ž‘์„ฑ

package.json๊ณผ main ๋ถ€๋ถ„๊ณผ ๋ฐฐํฌํ•  ํŒŒ์ผ ๊ฒฝ๋กœ๋ช…์ด ์ผ์น˜ํ•ด์•ผ ํ•จ
โ€œmainโ€: โ€œindex.jsโ€

index.js
module.exports = () => {
  return 'hello package';
};

3. ๋ฐฐํฌ ์‹œ๋„ํ•˜๊ธฐ

npm publish ์ž…๋ ฅ

npmtest๋ž€ ์ด๋ฆ„์„ ๋ˆ„๊ฐ€ ์‚ฌ์šฉ์ค‘

  • ์ด๋ฆ„์ด ๊ฒน์น˜๋ฉด ์•ˆ ๋˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ”์„œ ๋ฐฐํฌ

4. ๋ฐฐํฌ ์‹œ๋„ํ•˜๊ธฐ

์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ ํ›„ npm publish ์ž…๋ ฅ

5. ๋ฐฐํฌ ์ทจ์†Œํ•˜๊ธฐ

72์‹œ๊ฐ„ ๋‚ด์— npm unpublish ํŒจํ‚ค์ง€๋ช… --force์ž…๋ ฅ

๐Ÿ˜ƒ์ถœ์ฒ˜๐Ÿ˜ƒ
Node.js ๊ต๊ณผ์„œ - ๊ธฐ๋ณธ๋ถ€ํ„ฐ ํ”„๋กœ์ ํŠธ ์‹ค์Šต๊นŒ์ง€
https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard

0๊ฐœ์˜ ๋Œ“๊ธ€