๊ณต์‚ผ
article thumbnail


๐Ÿ“WebPack (์›นํŒฉ)

 

์›นํŒฉ์ด๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ •์  ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์ด๋‹ค.

 

์•Œ์•„๋“ฃ๊ธฐ ์–ด๋ ค์šด๋ฐ ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด Application์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์ž์›๋“ค ์ฆ‰, HTML, CSS, ์ด๋ฏธ์ง€, ํฐํŠธ๋“ฑ์„ ๋ชจ๋“ˆ๋กœ ๋ณด๊ณ  ์ด๋ฅผ ํ•˜๋‚˜์˜ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฒˆ๋“ค๋งํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค.

 

์›นํŒฉ์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ตฌ์„ฑ ์˜ต์„ ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”์— ๋”ฐ๋ผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค.

webpack.config.js ํŒŒ์ผ์— ์ •์˜ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์ฝ”๋“œ์˜ ๊ด€๋ฆฌ์™€ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

 

 

 

๐Ÿ“Pritter

 

ํ”„๋ฆฌํ‹ฐ์–ด๋Š” ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œ์ผœ์ฃผ๋Š” ๋„๊ตฌ๋กœ, pritterrc.js ๋“ฑ ๊ทธ ์•ˆ์—์„œ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿง‘‍๐Ÿ’ป ์„ค์น˜๋ฐฉ๋ฒ•

  1. ๋จผ์ € Visual Studio Code๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. ์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ "ํ™•์žฅ"์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฒ€์ƒ‰ ์ฐฝ์—์„œ "prettier"๋ฅผ ์ž…๋ ฅํ•˜์—ฌ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ "Prettier - Code formatter"๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  4. "Prettier - Code formatter"๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„ค์น˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
  5. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, VS Code์˜ ์„ค์ • ํŒŒ์ผ(settings.json)์„ ์—ฝ๋‹ˆ๋‹ค. (Ctrl + ,)
  6. settings.json ํŒŒ์ผ์—์„œ "editor.defaultFormatter" ํ•ญ๋ชฉ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  7. "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์ดํ•˜์˜ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ์ฆ‰ ๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

 

๐Ÿง‘‍๐Ÿ’ป ์„ค์น˜๋ฐฉ๋ฒ•

  1. ๋ฐ”๋ฒจ ์„ค์น˜ํ•˜๊ธฐ

๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๋ฐ”๋ฒจ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. **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๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ ๋ฌธ์ œ๋ฅผ ์ฐพ๊ณ  ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋กœ, ์ฝ”๋“œ, ์˜ค๋ฅ˜, ๋ฒ„๊ทธ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ด์–ด ์ผ๊ด€์„ฑ์žˆ๋Š” ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ •์ ๋ถ„์„ ํˆด์ด๋‹ค.

 

๐Ÿง‘‍๐Ÿ’ป ์„ค์น˜๋ฐฉ๋ฒ•

  1. int --save-dev ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด package.json ํŒŒ์ผ๊ณผ node_modules ํด๋”๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  2. ESLint ์„ค์ •ํ•˜๊ธฐ
    • ESLint ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • csharpCopy code npx eslint --init
    • ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ESLint ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”ํ˜• ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ESLint ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ESLint ์‹คํ–‰ํ•˜๊ธฐ
    • ESLint๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    • cssCopy code npx eslint [ํŒŒ์ผ ๋˜๋Š” ํด๋” ๊ฒฝ๋กœ]
    • ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ง€์ •ํ•œ ํŒŒ์ผ ๋˜๋Š” ํด๋” ๊ฒฝ๋กœ์— ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. ์—๋””ํ„ฐ์—์„œ ESLint ์‚ฌ์šฉํ•˜๊ธฐ
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์—๋””ํ„ฐ์—์„œ ESLint ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ฉด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์ž‘์„ฑ ์ค‘์— ESLint ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
profile

๊ณต์‚ผ

@g_three

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!