[TIL] 211113

Lee SyongΒ·2021λ…„ 11μ›” 13일
0

TIL

λͺ©λ‘ 보기
87/204
post-thumbnail

πŸ“ 였늘 ν•œ 것

  1. npm i / package-lock.json / express μ‚¬μš©ν•˜κΈ° / Babel / Nodemon

πŸ“š 배운 것

4. μ„œλ²„ λ§Œλ“€κΈ°

npm μ΄μš©ν•΄ νŒ¨ν‚€μ§€ κ°€μ Έμ˜€κΈ° ( μ–΄μ œ κ³΅λΆ€μ—μ„œ μ΄μ–΄μ„œ )

1) npm i

package.json 파일이 λ“€μ–΄ μžˆλŠ” ν΄λ”μ—μ„œ npm i expressλ₯Ό μž…λ ₯ν•œ κ²°κ³Ό, μ•„λž˜μ™€ 같이 package.json νŒŒμΌμ— express dependenciesκ°€ μΆ”κ°€λœ 것을 확인할 수 μžˆλ‹€. μ΄λŠ” ν•΄λ‹Ή ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” expressκ°€ ν•„μš”ν•¨μ„ λ‚˜νƒ€λ‚Έλ‹€.

"dependencies": {
  "express": "^4.17.1"
}

ν•œνŽΈ, VS code 터미널에 npm i expressλ₯Ό μž…λ ₯ν•  λ•Œ μΆ”κ°€λœ node_modules 폴더와 package-lock.json νŒŒμΌμ„ μΌλΆ€λŸ¬ μ‚­μ œν•œ ν›„, ν„°λ―Έλ„μ—μ„œ npm iλ§Œμ„ μž…λ ₯해도 μ‚­μ œν–ˆλ˜ 폴더듀이 μžλ™μœΌλ‘œ λ‹€μ‹œ μΆ”κ°€λ˜λŠ” 것을 확인할 수 μžˆλ‹€.

μ΄λŠ” 이전에 npm i expressλ₯Ό μž…λ ₯ν–ˆμ„ λ•Œ package.json 파일의 dependencies에 expressκ°€ μΆ”κ°€λ˜μ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€. κ·Έ ν›„ npm iλ§Œμ„ μž…λ ₯해도, npm은 μ•Œμ•„μ„œ package.json 파일의 dependenciesλ₯Ό λΆ„μ„ν•˜μ—¬, ν”„λ‘œκ·Έλž¨μ„ κ°€λ™ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“ˆ(νŒ¨ν‚€μ§€)듀을 λ‹€μš΄λ°›λŠ”λ‹€.

이 λ•Œλ¬Έμ— ν˜‘μ—…μ„ ν•  λ•Œ μš©λŸ‰μ΄ 큰 node_modules 폴더λ₯Ό κΉƒν—ˆλΈŒμ— μ—…λ‘œλ“œ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. 터미널에 npm i만 μž…λ ₯ν•˜λ©΄ ν•„μš”ν•œ νŒ¨ν‚€μ§€λ“€μ„ μ „λΆ€ μ„€μΉ˜ν•  수 있기 λ•Œλ¬Έμ΄λ‹€. λ”°λΌμ„œ, ν”„λ‘œμ νŠΈλ₯Ό κ³΅μœ ν•˜κ³  μ‹Άλ‹€λ©΄, package.jsonκ³Ό index.js νŒŒμΌλ§Œμ„ κ³΅μœ ν•˜λ©΄ λœλ‹€.

이λ₯Ό μœ„ν•΄μ„œλŠ” node_modules 폴더가 κΉƒν—ˆλΈŒμ— μ˜¬λΌκ°€μ§€ μ•Šλ„λ‘ μˆ¨κ²¨μ€˜μ•Ό ν•œλ‹€. ν”„λ‘œμ νŠΈ 폴더에 .gitignore 폴더λ₯Ό λ§Œλ“  ν›„ /node_modulesλ₯Ό μΆ”κ°€ν•˜λ„λ‘ ν•œλ‹€.

πŸ“Œ 주의 !

npm install [νŒ¨ν‚€μ§€ 이름]λ₯Ό μˆ˜ν–‰ν•  λ•ŒλŠ” package.json νŒŒμΌμ„ λ°˜λ“œμ‹œ 닫은 μƒνƒœμ—¬μ•Ό ν•œλ‹€. npm iλŠ” ν•΄λ‹Ή 파일의 dependencies 뢀뢄을 μˆ˜μ •ν•˜λŠ”λ°, package.json νŒŒμΌμ„ μˆ˜μ •ν•œ ν›„ 변경사항을 'μ €μž₯ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄' npm iκ°€ ν•΄λ‹Ή νŒŒμΌμ„ μˆ˜μ •ν•  λ•Œ 버전 좩돌이 μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ΄λ‹€.


2) package-lock.json

package-lock.json νŒŒμΌμ€ νŒ¨ν‚€μ§€λ“€μ„ μ•ˆμ „ν•˜κ²Œ 관리해쀀닀. νŒ¨ν‚€μ§€κ°€ μˆ˜μ •λλŠ”μ§€λ₯Ό ν•΄μ‹œ κ°’μœΌλ‘œ 체크해주며, 각 λͺ¨λ“ˆλ“€μ˜ 버전이 κΈ°λ‘λ˜μ–΄ μžˆλ‹€.

μœ„μ˜ package.json, index.js 파일과 ν•¨κ»˜ package-lock.json νŒŒμΌμ„ κ³΅μœ ν•œ ν›„, λ‹€λ₯Έ μ‚¬λžŒμ΄ ν•΄λ‹Ή package.json으둜 expressλ₯Ό μ„€μΉ˜ν–ˆλ‹€κ³  ν•˜μž. ( npm i (o) / npm i express(x) )

μ΄λ•Œ npm은 μœ„μ—μ„œ μ‚΄νŽ΄λ΄€λ“―μ΄ package.json 파일의 dependenciesλ₯Ό μ°Έκ³ ν•΄ ν•„μš”ν•œ λͺ¨λ“  λͺ¨λ“ˆλ“€μ„ λ‹€μš΄λ°›λŠ”λ°, λ™μ‹œμ— package-lock.json νŒŒμΌμ„ μ°Έκ³ ν•΄ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œλ„ λ‚˜μ™€ λ˜‘κ°™μ€ λ²„μ „μ˜ λͺ¨λ“ˆ(express)을 μ„€μΉ˜ν•΄μ€€λ‹€.


3) express μ‚¬μš©ν•˜κΈ°

expressλ₯Ό μ‚¬μš©ν•˜λŠ” 법은 κ°„λ‹¨ν•˜λ‹€. index.js νŒŒμΌμ— μ•„λž˜μ™€ 같이 μž‘μ„±ν•΄μ£Όλ©΄ λœλ‹€.

const express = require("express");

const app = express();

이 μ½”λ“œλŠ” μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ‘œ λ°”κΏ” μ“Έ 수 μžˆλ‹€. λ‹€λ§Œ, λ°”κΏ”μ“°λŠ” 건 어렡지 μ•Šλ”λΌλ„ 이λ₯Ό Node.jsκ°€ 이해할 수 μžˆμ–΄μ•Ό ν•œλ‹€. 그러기 μœ„ν•΄μ„  Node.jsκ°€ κ·Έ μ΅œμ‹  μ½”λ“œλ₯Ό 이해할 수 μžˆλ„λ‘ λ¨Όμ € 'Babel'을 μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€.

πŸ“Œ Babel

Babelμ΄λž€ μžλ°”μŠ€ν¬λ¦½νŠΈ 컴파일러λ₯Ό λ§ν•œλ‹€. Node.jsλŠ” 기본적으둜 μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜μ§€λ§Œ, μ΄ν•΄ν•˜μ§€ λͺ»ν•˜λŠ” μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μžˆλ‹€. Babel은 μ΄λŸ¬ν•œ μ΅œμ‹  μ½”λ“œλ₯Ό λͺ¨λ‘κ°€ 이해할 수 μžˆλŠ” μ½”λ“œλ‘œ λ°”κΏ”μ€€λ‹€.

πŸ”Ž Babel μ„€μΉ˜ν•˜κΈ°

  • λ¨Όμ €, Babel을 μ„€μΉ˜ν•˜κΈ° μœ„ν•΄ μ•„λž˜ μ½”λ“œλ₯Ό 터미널에 μž…λ ₯ν•œλ‹€.
    μ΄ν•˜μ˜ λͺ¨λ“  과정은 Babel ν™ˆνŽ˜μ΄μ§€ - Nodeλ₯Ό μ°Έκ³ ν•΄ 진행할 수 μžˆλ‹€.
npm install --save-dev @babel/core

μ΄λ ‡κ²Œ ν•˜λ©΄ package.json에 devDependenciesκ°€ μΆ”κ°€λœλ‹€. (μœ„μ˜ λͺ…λ Ήμ–΄μ—μ„œ '--save-dev'λ₯Ό λΉΌκ³  μž…λ ₯ν•˜λ©΄ dependencies에 μΆ”κ°€λœλ‹€.) dependencies와 devDependenciesλŠ” κ°œλ°œμžλ“€μ„ μœ„ν•΄ κ΅¬λΆ„ν•˜μ—¬ μΆ”κ°€λ˜λŠ” 것일 뿐, λ‘˜ λ‹€ node_modules에 μ„€μΉ˜λ˜λŠ” 것은 λ™μΌν•˜λ‹€.

"dependencies": { // ❗ ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 것
  "express": "^4.17.1"
},
"devDependencies": { // ❗ κ°œλ°œμžκ°€ 코딩을 쒀더 νŽΈν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ ν•„μš”λ‘œ ν•˜λŠ” 것
  "@babel/core": "^7.16.0"
}

πŸ”Ž μ„€μ • 파일 λ§Œλ“€κΈ°

  • λ‹€μŒμœΌλ‘œ, μ„€μ • νŒŒμΌμ„ λ§Œλ“€κΈ° μœ„ν•΄ μ•„λž˜ μ½”λ“œλ₯Ό 터미널에 μž…λ ₯ν•œλ‹€.
touch babel.config.json
// μœˆλ„μš°μ—μ„œλŠ” notepad babel.config.json μž…λ ₯ !

μƒμ„±λœ μ„€μ • νŒŒμΌμ— μ•„λž˜ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

{
  "presets": ["@babel/preset-env"]
}
  • λ‹€μ‹œ 터미널에 μ•„λž˜ μ½”λ“œλ₯Ό μž…λ ₯ν•œλ‹€. 항상 npm install λͺ…λ Ήμ–΄λŠ” package.json νŒŒμΌμ„ μ €μž₯ν•˜κ±°λ‚˜ 닫은 μƒνƒœμ—μ„œ μ‹€ν–‰μ‹œμΌœμ•Ό ν•œλ‹€.
npm install @babel/preset-env --save-dev

μœ„ μž‘μ—…μ˜ κ²°κ³Ό, package.json νŒŒμΌμ— ν•œ μ€„μ˜ μ½”λ“œκ°€ 더 μΆ”κ°€λœλ‹€.
μ„€μΉ˜λœ Babel은 μ•Œμ•„μ„œ μ„€μ • 파일(babel.config.json)을 μ°Ύμ•„ κ·Έ 파일의 λ‚΄μš©μ„ μ°Έκ³ ν•œλ‹€.

"devDependencies": {
  "@babel/core": "^7.16.0",
  "@babel/preset-env": "^7.16.0"
}

μœ„μ—μ„œ μ„€μ • νŒŒμΌμ— μž‘μ„±ν–ˆλ˜ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄, presetsλΌλŠ” 것이 μžˆλ‹€. presetμ΄λž€ babel을 μœ„ν•œ κ±°λŒ€ν•œ ν”ŒλŸ¬κ·ΈμΈμ„ λ§ν•œλ‹€. κ·Έ κ°€μš΄λ° preset-envκ°€ κ°€μž₯ 유λͺ…ν•œλ°, μ΄λŠ” μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ ꡬ문을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

πŸ”Ž Babel μ‚¬μš©ν•˜κΈ°

index.js νŒŒμΌμ— μ•„λž˜ μ½”λ“œλ₯Ό μž…λ ₯ν•˜λ©΄, Babel을 μ‚¬μš©ν•  수 μžˆλ‹€.

require("@babel/core").transform("code", {
  presets: ["@babel/preset-env"],
});

κ·ΈλŸ¬λ‚˜ μ΄λ ‡κ²Œ 직접 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ Babel을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹ μ—, package.json νŒŒμΌμ—μ„œ babel둜 μ»΄νŒŒμΌν•˜λŠ” scriptλ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” Nodemonμ΄λž€ 것이 ν•„μš”ν•˜λ‹€.

πŸ“Œ Nodemon

Nodemon은 νŒŒμΌμ„ κ΄€μ°°ν•˜κ³  μžˆλ‹€κ°€ 파일이 μˆ˜μ •λ˜λ©΄ μ•Œμ•„μ„œ μ„œλ²„λ₯Ό μž¬μ‹œμž‘ν•΄μ€€λ‹€.

πŸ”Ž babel/node μ„€μΉ˜ν•˜κΈ°

  • λ¨Όμ €, Nodemon을 μ„€μΉ˜ν•˜κΈ° 전에 babel/node μ„€μΉ˜ν•˜κΈ° μœ„ν•΄ μ•„λž˜ μ½”λ“œλ₯Ό 터미널에 μž…λ ₯ν•œλ‹€.
    μ΄ν•˜μ˜ 과정은 Babel ν™ˆνŽ˜μ΄μ§€ - Nodemonλ₯Ό μ°Έκ³ ν•΄ 진행할 수 μžˆλ‹€.
npm install @babel/core @babel/node --save-dev
// 이미 μ„€μΉ˜λœ babel은 npm이 μ•Œμ•„μ„œ λΉΌκ³  μ„€μΉ˜ν•΄μ€€λ‹€

πŸ”Ž 'Babel둜 μ»΄νŒŒμΌν•˜λŠ” script' μΆ”κ°€ 및 μ‹€ν–‰

"scripts": {
  "dev": "babel-node index.js"
  // 이전에 λ§Œλ“€μ—ˆλ˜ start scriptμ—μ„œ μ•žμ— 'babel-'만 μΆ”κ°€ν•΄μ€€ 것
}

해석: index.jsλΌλŠ” νŒŒμΌμ— babel-nodeλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€.

npm run dev

VS code 터미널에 μœ„μ²˜λŸΌ μž‘μ„±ν•˜λ©΄, dev script에 따라 Babel이 Node.js와 ν•¨κ»˜ μ‹€ν–‰λœλ‹€.

// const express = require("express"); λ₯Ό
// μ΅œμ‹  μ½”λ“œλ‘œ λ°”κΎΈλ©΄ μ•„λž˜μ™€ κ°™λ‹€
import express from "express";

즉, Babel이 μœ„μ™€ 같은 μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ„ Node.jsκ°€ 이해할 수 μžˆλŠ” μ½”λ“œλ‘œ λ°”κΏ”μ€ŒμœΌλ‘œμ¨, μ΅œμ‹  μ½”λ“œλ„ λ¬Έμ œμ—†μ΄ μ‹€ν–‰λ˜λ„λ‘ ν•œλ‹€.

κ·ΈλŸ¬λ‚˜, μ΄λ ‡κ²Œ ν•˜λ©΄ index.js의 μ½”λ“œλ₯Ό λ°”κΏ€ λ•Œλ§ˆλ‹€ 터미널에 npm run devλ₯Ό μž…λ ₯ν•΄μ€˜μ•Ό ν•œλ‹€. 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Nodemon을 μ‚¬μš©ν•  수 μžˆλ‹€. Nodemon을 μ‚¬μš©ν•˜λ©΄ μ²˜μŒμ— 터미널에 λͺ…λ Ήμ–΄λ₯Ό ν•œ 번만 μž…λ ₯해도 파일이 μˆ˜μ •λ  λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ μž¬μ‹œμž‘ν•΄μ€€λ‹€.

πŸ”Ž Nodemon μ„€μΉ˜

npm install nodemon --save-dev

πŸ”Ž Nodemon μ‹€ν–‰

기쑴의 dev script μ½”λ“œ μ•žμ— nodemon --execλ₯Ό λΆ™μ—¬μ€€λ‹€

"scripts": {
  "dev": "nodemon --exec babel-node index.js"
  // nodemon이 babel-node index.js을 μ‹€ν–‰ν•œλ‹€
}

이제 맀번 λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯해주지 μ•Šμ•„λ„ νŒŒμΌμ„ μˆ˜μ •ν•œ ν›„ μ €μž₯ν•  λ•Œλ§ˆλ‹€ index.js 파일의 μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€.


✨ 내일 ν•  것

  1. κ°•μ˜ 계속 λ“£κΈ°

  2. 였λ₯˜ ν•΄κ²° - λ§ˆμ§€λ§‰ babel-node와 nodemon λΆ€λΆ„μ—μ„œ μ—λŸ¬κ°€ 났닀..

profile
λŠ₯λ™μ μœΌλ‘œ μ‚΄μž, ν–‰λ³΅ν•˜κ²ŒπŸ˜

0개의 λŒ“κΈ€