waffle
์™€ํ”Œ๊ณต์žฅ
waffle
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (72)
    • ๐Ÿ“’ Daily Log (2)
    • ๐Ÿ”จ Dev_BE (5)
      • ๊ฐœ๋…์ •๋ฆฌ (4)
      • ๊ธฐ๋ก (1)
    • ๐Ÿ”จ Dev_FE (4)
    • ๐Ÿ”จ Dev_DB (1)
    • โš™ Dev_Ops (0)
    • ๐Ÿ”ก Lang (2)
      • Python (2)
    • ๐Ÿ’ก ํ”„๋กœ์ ํŠธ (9)
      • Base (1)
      • ์•„๋Œ€๋ฐ€๋งต (8)
    • ๐Ÿƒ๐Ÿป ์™ธ๋ถ€ํ™œ๋™ (2)
      • [ํ”„๋ฆฌ์ฝ”์Šค] ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 7๊ธฐ - BE (2)
    • ๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ (13)
      • [STUDY] ์•Œ๊ณ ๋ฆฌ์ฆ˜ (9)
      • ๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021) (4)
    • ๐Ÿ“™ [STUDY] AI (2)
      • Tensorflow (2)
    • ๐Ÿ” ๋ณด์•ˆ,์ •๋ณด๋ณดํ˜ธ (32)
      • CTF (2)
      • ๐Ÿ“˜ [STUDY] ํฌ๋ Œ์‹ (15)
      • ๐Ÿ“˜ [STUDY] ์ทจ์•ฝ์  (4)
      • ๐Ÿ“˜ [STYDY] ๋ฆฌ๋ฒ„์‹ฑ (11)
    • ๐Ÿ“” IT ๋ฒ•๋ฅ  (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
  • JAVA_API
  • ์ˆ˜ํ•™_1
  • ๋ฐฑ์ค€
  • Java
  • js
  • ๊ฐœ๋ฐœ
  • javascript
  • gdb
  • til
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Weekly
  • write-up
  • sql
  • ์—ฐ์Šต_์ž๋ฃŒ๊ตฌ์กฐ
  • ์ˆ˜ํ•™_1(์—ฐ์Šต)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ_๊ณ ๋“์ 
  • API
  • dopwn
  • ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฌธ์ž์—ด
  • reversing
  • scrum
  • ๊ฐœ๋ฐœ๋ฐฑ์„œ
  • ์•„์ฃผ๋Œ€_์•Œ๊ณ ๋ฆฌ์ฆ˜_๊ต์œก
  • ๋ฐ์ผ๋ฆฌ์•Œ๊ณ 
  • ์šฐํ…Œ์ฝ”_7๊ธฐ
  • ํ”„๋ฆฌ์ฝ”์Šค
  • ์šฐํ…Œ์ฝ”

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
waffle

์™€ํ”Œ๊ณต์žฅ

๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ/๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021)

[ JS ] Babel & EsLint

2022. 1. 24. 21:00
728x90

0. ๊ฐœ์š”

 

js์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๋ฅผ ํ†ตํ•ด ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์›น์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ์–ธ์–ด๋กœ์„œ JS์˜ ๊ธฐ๋ณธ์„ ๊ณต๋ถ€ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. js์˜ ๊ธฐ์ดˆ์— ์ด์–ด js๊ฐœ๋ฐœ์— ๋„์›€์„ ์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ธ Babel ๊ณผ EsLint๋ฅผ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

1. ํ•™์Šต๋ชฉ์ 

 

Babel๊ณผ EsLint์˜ ํ•„์š”๋ชฉ์ 

Babel๊ณผ EsLint์˜ ๋™์ž‘์›๋ฆฌ ๋ฐ ์ด์šฉ

 

2. ํ•™์Šต๋‚ด์šฉ

 

1) Babel

 

Babel์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ, ์ตœ์‹  ๋ฒ„์ „์˜ js๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋“ค์„ ํ•˜์œ„๋ฒ„์ „์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

2) Babel์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

 

js๋Š” ์—ฌ๋Ÿฌ ๋ฒ„์ „๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ, ํ‘œ์ค€ํ™”๋œ ๋ฒ„์ „๋ถ€ํ„ฐ ๋”ฐ์ ธ๋ณด์ž๋ฉด 1997๋…„์— ์ถœ์‹œํ•œ ES1์„ ์‹œ์ž‘์œผ๋กœ ํ˜„์žฌ ES9๊นŒ์ง€ ์ถœ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ES6 ์ดํ›„ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ž…์žฅ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ, ์•„๋ž˜์˜ ๋ฌธ๋ฒ•๋“ค์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค:

 

  • arrow function ( () => {} )
  • classes ( contructor, ์ƒ์†๊ตฌํ˜„ ๋“ฑ )
  • object literal ( key๊ฐ’๊ณผ ๋ณ€์ˆ˜๋ช…์ด ๊ฐ™์œผ๋ฉด value๊ฐ’ ์ƒ๋žต ๊ฐ€๋Šฅ ( ex: { user: user } => { user } ) )
  • Template String ( '`' & '${}'์˜ ์‚ฌ์šฉ )
  • destructuring ( ๊ฐ์ฒด์—์„œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ )
  • let & const ( ๋ณ€์ˆ˜ ์„ ์–ธ์ž ์ถ”๊ฐ€ )

 

3) polyfill

 

 ์˜์–ด๋กœ '์ถฉ์ „์†œ'์ด๋ž€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์›น์—์„œ๋Š” "๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ"์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 ํด๋ฆฌํ•„์—๋Š” core.js / polyfill.io ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, Babel์—์„œ๋Š” babel-polyfill์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ(?)๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๋ณ„๋„์˜ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (ํ•˜๋‹จ ์ฐธ๊ณ )

https://babeljs.io/docs/en/babel-polyfill/

 

Babel · The compiler for next generation JavaScript

The compiler for next generation JavaScript

babeljs.io

 

4) ESLint

 ES(EcmaScript)์˜ ๋ณดํ‘ธ๋ผ๊ธฐ๋ฅผ ์žก์•„๋‚ด๋Š” ๋ฆฐํ„ฐ (linter)์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ๋งํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์—์„œ ์—๋Ÿฌ๊ฐ€ ์žˆ๋Š”๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋˜๋Š” ๊ณณ์— ํ‘œ์‹œ๋ฅผ ํ•ด์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ๊ด€๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 ์‚ฌ์‹ค ๋ฆฐํ„ฐ์˜ ์ข…๋ฅ˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์ด์ง€๋งŒ, ๊ทธ์ค‘์—์„œ๋„ ESLint๊ฐ€ ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๊ณ  ๋งŽ์ด ์“ฐ์ด๋Š” ์ด์œ ๋Š” ํ™•์žฅ์„ฑ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ด ๋•๋ถ„์— ์ƒˆ๋กœ์šด ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด์— ๋‹ค๋ฅธ ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉ์ค‘์ด๋˜ ์ฝ”๋“œ์Šคํƒ€์ผ์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

5) ESLint: ์‚ฌ์šฉ๋ฒ•

 ์ •์˜ํ•˜๊ณ , ๊ฒ€์‚ฌํ•˜๋ผ๊ณ  ์‹œํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๊ฒ€์‚ฌํ•˜๋Š”์ง€ ์•Œ์•„์•ผ๊ฒ ์ฃ .

ESLint๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„  eslint๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํŒจํ‚ค์ง€์ฒ˜๋Ÿผ ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํŠน์ • ํšŒ์‚ฌ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ•จ๊ป˜ ์„ค์น˜ํ•˜์„ธ์š”.

npm install -g eslint

 

 ์ด์ œ ๊ทœ์น™์„ ์ •์˜๋ฅผ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์€ .eslintrc๋ผ๋Š” ํŒŒ์ผ์— ๋‹ด์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑํ˜•์‹์€ json ์ž…๋‹ˆ๋‹ค.

// Reference: https://www.zerocho.com/category/JavaScript/post/583231719a87ec001834a0f2
{
  "parserOptions": { // js ๋ฒ„์ „ ์ •์˜
    "ecmaVersion": 6,
    "sourceType": "module"
  },
  "extends": "airbnb-base", // ํƒ€์‚ฌ ์ฝ”๋”ฉ ์Šคํƒ€์ผ ์ ์šฉ ("์˜ˆ์‹œ: airbnb")
  "env": { // ํ”„๋กœ์ ํŠธ์˜ ์‚ฌ์šฉ ํ™˜๊ฒฝ ์„ค์ •
    "browser": true,
    "node": true
  },
  "rules": { // "extends" or "plugins"์˜ ์„ธ๋ถ€ ์„ค์ • ๋ณ€๊ฒฝ
    "max-length": 0 // 0: ์—๋Ÿฌ ๋ฌด์‹œ | 1: ๊ฒฝ๊ณ  | 2: ์—๋Ÿฌ
  },
  "plugins": ['import'], // ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ (ex: html / import / jsx-a11y / react)
  "globals": { // ์ „์—ญ๋ณ€์ˆ˜ ( ESLint์—์„œ ์ „์—ญ๋ณ€์ˆ˜๋Š” ์—๋Ÿฌ๋กœ ๊ฐ„์ฃผ => ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ )
    // ex: jQuery
    "jQuery": true,
    "$": true
  }
}

 

 ํ•˜์ง€๋งŒ ๋ชจ๋“  ํŒŒ์ผ์„ ๊ฒ€์‚ฌํ•œ๋‹ค๋ฉด ์›ํ•˜๋Š” ๋ฌธ๋ฒ•์„ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์‚ฌ๋ฅผ ์ œ์™ธ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

// 1. ํ•„ํ„ฐ๋งํ•  ๋‚ด์šฉ์„ ํ•œ ํŒŒ์ผ์—์„œ ์ •์˜ (.eslintignore)

/node_modules/** // -> /node_modules ๋‚ด์˜ ํŒŒ์ผ๋“ค ๊ฒ€์‚ฌ ์ œ์™ธ


// 2. ์ฝ”๋”ฉ ์ค‘ ํŠน์ • ๋ถ€๋ถ„๋งŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

/* eslint-disable */ // ๋‹ค์Œ์ค„๋ถ€ํ„ฐ ๋ฌธ์„œ ๋๊นŒ์ง€ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์Œ
/* eslint-enable */ // ๋‹ค์Œ์ค„๋ถ€ํ„ฐ ๋ฌธ์„œ ๋๊นŒ์ง€ ๊ฒ€์‚ฌํ•จ


// 3. ๋‹ค์Œ์ค„๋งŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
/* eslint-disable-next-line */ // ๋‹ค์Œ์ค„ 1์ค„๋งŒ ๊ฒ€์‚ฌ๋ฅผ ๊ฑด๋„ˆ๋œ€
728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ > ๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ CSS ] CSS ๋ Œ๋”๋ง ํ๋ฆ„  (0) 2022.02.13
[ JS ] ์•„ํ† ๋ฏน ์ปดํฌ๋„ŒํŠธ ๋””์ž์ธ ๊ฐœ๋ฐœ ํŒจํ„ด  (0) 2022.02.09
[ JS ] Prototype  (0) 2022.01.06
    '๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ/๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ CSS ] CSS ๋ Œ๋”๋ง ํ๋ฆ„
    • [ JS ] ์•„ํ† ๋ฏน ์ปดํฌ๋„ŒํŠธ ๋””์ž์ธ ๊ฐœ๋ฐœ ํŒจํ„ด
    • [ JS ] Prototype
    waffle
    waffle
    ๊ฐœ๋ฐœ๊ธฐ์ˆ  ๊ด€๋ จ ๊ธ€๋“ค์€ velog์— ์žˆ์Šต๋‹ˆ๋‹ค :) (https://velog.io/@cm_waffle) Developer waffle = new Waffle();

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”