๐WebPack (์นํฉ)
์นํฉ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ด๋ค.
์์๋ฃ๊ธฐ ์ด๋ ค์ด๋ฐ ์ฝ๊ฒ ๋งํ์๋ฉด Application์ ๊ตฌ์ฑํ๊ณ ์๋ ๋ชจ๋ ์์๋ค ์ฆ, HTML, CSS, ์ด๋ฏธ์ง, ํฐํธ๋ฑ์ ๋ชจ๋๋ก ๋ณด๊ณ ์ด๋ฅผ ํ๋์ ์์กด์ฑ ๊ทธ๋ํ๋ก ๊ฒฐํฉํ์ฌ ๋ฒ๋ค๋งํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด ์ง๋ค.
์นํฉ์ ์ฌ๋ฌ๊ฐ์ ๊ตฌ์ฑ ์ต์ ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ํ์์ ๋ฐ๋ผ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์๋ค.
webpack.config.js ํ์ผ์ ์ ์ํด ์ฌ์ฉํ๋ฉฐ ์ฝ๋์ ๊ด๋ฆฌ์ ์ฑ๋ฅ์ ํฅ์์ํค๋๋ฐ ๋งค์ฐ ์ ์ฉํ๋ค.
๐Pritter
ํ๋ฆฌํฐ์ด๋ ์ฝ๋์ ์ผ๊ด์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ํฅ์์์ผ์ฃผ๋ ๋๊ตฌ๋ก, pritterrc.js ๋ฑ ๊ทธ ์์์ ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
๐ง๐ป ์ค์น๋ฐฉ๋ฒ
- ๋จผ์ Visual Studio Code๋ฅผ ์คํํฉ๋๋ค.
- ์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ "ํ์ฅ"์ ํด๋ฆญํฉ๋๋ค.
- ๊ฒ์ ์ฐฝ์์ "prettier"๋ฅผ ์ ๋ ฅํ์ฌ, ๊ฒ์ ๊ฒฐ๊ณผ์์ "Prettier - Code formatter"๋ฅผ ์ฐพ์ต๋๋ค.
- "Prettier - Code formatter"๋ฅผ ํด๋ฆญํ์ฌ ์ค์น ๋ฒํผ์ ๋๋ฆ ๋๋ค.
- ์ค์น๊ฐ ์๋ฃ๋๋ฉด, VS Code์ ์ค์ ํ์ผ(settings.json)์ ์ฝ๋๋ค. (Ctrl + ,)
- settings.json ํ์ผ์์ "editor.defaultFormatter" ํญ๋ชฉ์ ์ฐพ์ต๋๋ค.
- "editor.defaultFormatter" ํญ๋ชฉ์ ๊ฐ์ **"esbenp.prettier-vscode"**๋ก ๋ณ๊ฒฝํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก settings.json ์์ prettier ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ ์ฌ์ฉ์ ์ ์ ์ค์ ์ ์ ๋ ฅํ๋ฉด ๋๋ค.
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.tabWidth": 4,
"prettier.trailingComma": "all",
"prettier.singleQuote": true
}
๐Babel
๋ฐ๋ฒจ์ ES6 ์ด์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ES5์ดํ์ ํธํ ๊ฐ๋ฅํ ์ฝ๋๋ก ๋ณํํด์ค๋ค. ์ฆ ๋ฐ๋ฒจ์ ์ฌ์ฉํ๋ฉด ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋๋ผ๋ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ์คํ ๊ฐ๋ฅํ๊ฒ ๋๋ค.
๐ง๐ป ์ค์น๋ฐฉ๋ฒ
- ๋ฐ๋ฒจ ์ค์นํ๊ธฐ
๋ฐ๋ฒจ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ ๋ฐ๋ฒจ ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. **npm**์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์ค์นํ ์ ์์ต๋๋ค.
scssCopy code
npm install --save-dev @babel/core @babel/preset-env
2. ๋ฐ๋ฒจ์ค์ ํ๊ธฐ
๋ฐ๋ฒจ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ .babelrc ๋๋ babel.config.js ํ์ผ์ ์์ฑํ์ฌ ๋ฐ๋ฒจ ์ค์ ์ ์ ์ํด์ผ ํฉ๋๋ค. babel-preset-env ํ๋ฆฌ์ ์ ์ฌ์ฉํ์ฌ, ๋ณํํ๊ณ ์ ํ๋ ECMAScript ๋ฒ์ ์ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, .babelrc ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
jsonCopy code
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"browsers": ["last 2 versions", "ie >= 11"]
},
"useBuiltIns": "usage",
"corejs": 3
}
]
]
}
์ ์ค์ ์์๋, "browsers": ["last 2 versions", "ie >= 11"] ์ต์ ์ ํตํด, ์ต์ ๋ธ๋ผ์ฐ์ ์ ๋ง์ง๋ง ๋ ๋ฒ์ ๊ณผ IE11 ๋ฒ์ ์ด์์ ์ง์ํ๋๋ก ์ค์ ํ๊ณ ์์ต๋๋ค. ๋ํ, "useBuiltIns": "usage" ์ต์ ์ ์ฌ์ฉํ์ฌ, ์ฝ๋์์ ํ์ํ ํด๋ฆฌํ(polyfill)๋ง ํฌํจํ๋๋ก ์ค์ ํ๊ณ , corejs ๋ฒ์ ์ **3**์ผ๋ก ์ค์ ํ์์ต๋๋ค.
3. ์นํฉ์์ ๋ฐ๋ฒจ ์ค์ ํ๊ธฐ
๋ฐ๋ฒจ์ ์นํฉ๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์นํฉ ์ค์ ํ์ผ(webpack.config.js)์์ ๋ค์๊ณผ ๊ฐ์ด module.rules ํญ๋ชฉ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
jsCopy code
module.exports = {
// ...
module: {
rules: [
{
test: /\\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
cacheDirectory: true,
},
},
},
],
},
// ...
};
๐ESlint
eslint๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ ๋ฌธ์ ๋ฅผ ์ฐพ๊ณ ์๋ฐฉํ๊ธฐ ์ํ ๋๊ตฌ๋ก, ์ฝ๋, ์ค๋ฅ, ๋ฒ๊ทธ๋ฑ ๋ค์ํ ์ข ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด์ด ์ผ๊ด์ฑ์๋ ์ฝ๋ ์คํ์ผ์ ์ ์งํ ์ ์๋๋ก ๋์์ฃผ๋ ์ ์ ๋ถ์ ํด์ด๋ค.
๐ง๐ป ์ค์น๋ฐฉ๋ฒ
- int --save-dev ์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด package.json ํ์ผ๊ณผ node_modules ํด๋๊ฐ ์์ฑ๋ฉ๋๋ค.
- ESLint ์ค์ ํ๊ธฐ
- ESLint ์ค์ ํ์ผ์ ์์ฑํ๊ณ ํ์ํ ๊ท์น์ ์ถ๊ฐํฉ๋๋ค.
- csharpCopy code npx eslint --init
- ์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ESLint ์ค์ ํ์ผ์ ์์ฑํ ์ ์๋ ๋ํํ ํ๋กฌํํธ๊ฐ ๋ํ๋ฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ด ํ๋กฌํํธ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด์ ํ๋ก์ ํธ์ ์ ํฉํ ESLint ์ค์ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค.
- ESLint ์คํํ๊ธฐ
- ESLint๋ฅผ ์คํํ์ฌ ํ๋ก์ ํธ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๊ฒ์ฌํฉ๋๋ค.
- cssCopy code npx eslint [ํ์ผ ๋๋ ํด๋ ๊ฒฝ๋ก]
- ์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์ง์ ํ ํ์ผ ๋๋ ํด๋ ๊ฒฝ๋ก์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๊ฒ์ฌํ๊ณ , ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- ์๋ํฐ์์ ESLint ์ฌ์ฉํ๊ธฐ
- ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ ์๋ํฐ์์ ESLint ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ์์ฑ ์ค์ ESLint ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
'CS > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ผ์ฐ์ ๋๋๋ง ๊ณผ์ (+์๋ฒ Data ๋ฐ์์ค๋ ๊ณผ์ ) (0) | 2023.09.08 |
---|---|
ํ ํฐ, ์ฟ ํค, ์ธ์ , ์น์คํ ๋ฆฌ์ง ๋? (0) | 2023.08.29 |
[SEO] lighthouse, ๋ฌธ์์ ๋ฉํ ์ค๋ช ์ด ์์ (0) | 2023.05.11 |
์น ๋น๋๊ธฐ ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ๋ฅ (AJAX, FETCH, Axios) (0) | 2023.05.02 |
(๋ง์ฌ์ฉ๋ฃ) ํต์ ์ฌ vs ์ฝํ ์ธ ์ฌ (0) | 2023.03.04 |