๐ŸŒฑ → ๐ŸŒณ

mac์—์„œ node.js ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ… ๋ณธ๋ฌธ

Server/Node.js

mac์—์„œ node.js ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…

BAY 2022. 8. 24. 17:42
728x90

n ์„ค์น˜
n lts ๋ฒ„์ „ ์„ค์น˜

sudo๋กœ ๊ถŒํ•œ ์ฃผ์–ด ์„ค์น˜

 

๐Ÿ“Œ NPM ์ด๋ž€?

Node Package Manager

ํŽ˜ํ‚ค์ง€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ•˜๋‚˜์˜ json ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•ด ์คŒ

 

โœ… ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์ž‘ํ•˜๊ธฐ 

npm init -y

 

package.js ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ์ด ํŒŒ์ผ์•ˆ์— node.js ๊ด€๋ จ package ์ •๋ณด๊ฐ€ ๋‹ค ๋“ค์–ด๊ฐ

{
  "name": "day27",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

์œ„์˜ ํŒŒ์ผ์ด ์ฒ˜์Œ ์ƒ์„ฑ ๋‹น์‹œ์˜ package.js์ด๋‹ค.

 

npm run test

 

> day27@1.0.0 test
> echo "Error: no test specified" && exit 1

Error: no test specified

๋นŒ๋“œ ํ•ด์ค€ ๋ฌธ๊ตฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๐Ÿ“Œ Formatting 

  • Code์˜ ์Šคํƒ€์ผ์„ ํ†ต์ผ ์‹œ์ผœ ์คŒ
  • ex) ํ•จ์ˆ˜์˜ ์†Œ๊ด„ํ˜ธ์™€ ์ค‘๊ด„ํ˜ธ๋Š” ๋„์šธ ๊ฒƒ์ธ์ง€? ์„ธ๋ฏธ ์ฝœ๋ก ์€ ์ฐ์„ ๊ฒƒ์ธ์ง€? ํƒญ์„ ๋ˆ„๋ฅด๋ฉด ๋ช‡ ์นธ์„ ๋„์šธ ๊ฒƒ์ธ์ง€? ๋“ฑ๋“ฑ๋“ฑ
  • ๋ฌธ๋ฒ•์ด ์•„๋‹Œ ์ฝ”๋“œ์˜ ์Šคํƒ€์ผ์„ ํ†ต์ผ ์‹œ์ผœ์ค˜์„œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ฒ„๊ทธ๋ฅผ ์˜ˆ๋ฐฉํ•จ
  • Prettier ๋ฅผ ์‚ฌ์šฉ

โœ… ํ”„๋กœ์ ํŠธ์— prettier ์„ค์ •ํ•˜๊ธฐ 

npm install --save-dev prettier
--save ๋Š” ํŒจํ‚ค์ง€ ๋ชจ๋“ˆ์— ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์˜๋ฏธ
--save-dev ๋Š” ๊ฐœ๋ฐœํ•  ๋•Œ์—๋งŒ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ (์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ & ๋ฐฐํฌํ•˜๋ฉด ํ•ด๋‹น ํŒจํ‚ค์ง€๋Š” ํฌํ•จ X)

 

package.js ํŒŒ์ผ์„ ํ™•์ธํ•˜์—ฌ prettier๊ฐ€ ์ž˜ ์„ค์น˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

.prettierrc ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์•„๋ž˜ ์ฝ”๋“œ ์‚ฝ์ž…ํ•˜์—ฌ ์„ค์ •์™„๋ฃŒํ•˜๊ธฐ 

{
    "semi": true, //์„ธ๋ฏธํด๋ก 
    "singleQuote": true //์ž‘์€ ๋”ฐ์˜ดํ‘œ ์‚ฌ์šฉ
}

 

vscode ์—๊ฒŒ prettier ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ธฐ!
-> vscode ํด๋” ๋งŒ๋“ค๊ณ  settings.json ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€ 
{
    "[javascript]": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    }
}

 

๐Ÿ“Œ Linting 

Formatting ์— ๊ฐ€๊น์ง€๋งŒ ๋” ๋งŽ์€ ๊ทœ์•ฝ๊ณผ ๊ทœ์œจ์„ ๊ฒ€์‚ฌํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•

์›น ๊ฐœ๋ฐœ์—์„œ๋Š” Airbnb ์—์„œ ์‚ฌ์šฉํ•˜๋Š” Linting ๊ทœ์œจ์ด ์œ ๋ช…ํ•จ

 

โœ… ESLint ์„ค์น˜ํ•˜๊ธฐ

npm install --save-dev eslint
package-lock.json ํŒŒ์ผ์„ ๋ณด๋ฉด prettier์— ๋น„ํ•ด ํ›จ์”ฌ ๋งŽ์€ package ๊ฐ€ ์„ค์น˜ ๋˜์—ˆ์Œ์„ ํ™•์ธ์ด ๊ฐ€๋Šฅ
-> ๊ทธ๋งŒํผ ๋งŽ์€ ๊ทœ์•ฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ!

โœ… ESLint ์„ค์ •ํ•˜๊ธฐ

.eslintrc.js ํŒŒ์ผ ์ƒ์„ฑ ํ›„ 

Airbnb์˜ Linting Rule๋ฅผ ๊ฐ€์ ธ ์˜ค๊ธฐ(์•„๋ž˜ ์ฝ”๋“œ)

npm install --save-dev eslint-config-airbnb-base eslint-plugin-import

.eslintrc.js ํŒŒ์ผ์— ๊ฐ€์„œ airbnb ๋ชจ๋“ˆ ์ถ”๊ฐ€ 

module.exports = {
  extends: ['airbnb-base'],
  rules: {
    'linebreak-style': 0,
    'no-console': 'off',
  },
};

 

๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ„๊ณผํ•  ์ˆ˜ ์žˆ๋Š” Rule ๋“ค์„ ๋ฐ”๋กœ๋ฐ”๋กœ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— ๋ฐœ์ƒํ•  ์˜ˆ์ƒ์™ธ์˜ ๋ฒ„๊ทธ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ•ด๊ฒฐํ•ด ์ค€๋‹ค

 

๐Ÿ“Œ Typescript 

javascript์˜ ๋ฌธ๋งฅ์ƒ ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ๋Š” typescript

 

โœ… typescript ์„ค์น˜

npm install --save-dev typescript

โœ… typescript ์„ค์ •

Main.js ํŒŒ์ผ์— // @ts-check ์ฃผ์„ ์ถ”๊ฐ€

 

Node.js ์—๋„ ๋‹ค์–‘ํ•œ Type ์ด ์กด์žฌ ํ•˜๋ฏ€๋กœ ๊ด€๋ จ package ์„ค์น˜

npm install –-save-dev @types/node

 

728x90