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/
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์ค๋ง ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋
'๐ [STUDY] ๊ฐ๋ฐ > ๋๊ณ ์คํฐ๋ [Do-iT: ์นํฉ] (2021)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ CSS ] CSS ๋ ๋๋ง ํ๋ฆ (0) | 2022.02.13 |
---|---|
[ JS ] ์ํ ๋ฏน ์ปดํฌ๋ํธ ๋์์ธ ๊ฐ๋ฐ ํจํด (0) | 2022.02.09 |
[ JS ] Prototype (0) | 2022.01.06 |