[TIL] Babel, PostCss

noopyยท2021๋…„ 10์›” 3์ผ
1

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
17/21
post-custom-banner

> Week 8. ๋“œ๋””์–ด babel, postcss ๋ฐฐ์šด๋‹น!!!! ๐Ÿคฉ

๐Ÿก Babel

ES5 ์ด์ƒ์˜ ๋ฒ„์ „์„ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ฎ์ถ”๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” transcompiler

โš ๏ธ Babel์ด ์—†๋Š” ๊ธฐ๋Šฅ์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ฃผ์ง€๋Š” ์•Š์Œ

์„ค์น˜

npm i -D @babel/core @babel/cli

  • @babel/core: ๋ฐ”๋ฒจ์˜ ์ฝ”์–ด ํŒจํ‚ค์ง€ ๐Ÿ‘‰๐Ÿป ๊ฒฐ๊ณผ๋ฌผ๋งŒ ๋‚ด์ฃผ์ง€ ๋ณ€ํ™˜ํ•ด์ฃผ์ง„ ์•Š์Œ
  • @babel/cli: ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€
    ๐Ÿ‘‰๐Ÿป webpack-cli๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์„ค์น˜ ์•ˆํ•ด๋„ ๋จ
"scripts": {
    "babel": "babel main.js --out-dir dist" // ์ง„์ž…์  ๐Ÿ‘‰๐Ÿป ๊ฒฐ๊ณผ
},

babel.config.json

  • ์‹ค์ œ ๋ณ€ํ™˜์€ ํ”Œ๋Ÿฌ๊ทธ์ธ|ํ”„๋ฆฌ์…‹์— ํŒจํ‚ค์ง€๋ฅผ ๋“ฑ๋กํ•ด์•ผ ์ด๋ฃจ์–ด์ง!

๋‘๊ทผ๋‘๊ทผ ๐Ÿ’•

{
  "presets": ["@babel/preset-env"], // ๋ณ€ํ™˜์€ ํ•ด์ฃผ์ง€๋งŒ ์ „์—ญ์˜ค์—ผ ๊ฐ€๋Šฅ์„ฑ
  "plugins": [
    [
      "@babel/plugin-transform-runtime", // ์ „์—ญ์˜ค์—ผ ๋ฐฉ์ง€. ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•๋งŒ ๋ณ€ํ™˜
      {
        // ์˜ต์…˜
        corejs: 3
      }
    ]
  ]
}

preset-env

npm i -D @babel/preset-env
package๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ , presets์ธ ํ†ตํ•ฉ ํŒจํ‚ค์ง€๋กœ ์„ค์น˜

corejs

babel์€ corejs๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ
default์ธ 2๋ฒ„์ „๋ง๊ณ  3๋ฒ„์ „์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋” ๋งŽ์ด ์ธ์‹ํ•ด ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ.
npm i -D @babel/runtime-corejs3

useBuiltIns

  • default: false
  • entry: ์ „๋ถ€๋‹ค ๋ณ€ํ™˜
  • usage: ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•๋งŒ ๋ณ€ํ™˜
    ๐Ÿ‘‰๐Ÿป ๋‘˜๋‹ค corejs์— ํด๋ฆฌํ•„์— ๋“ฑ๋ก๋จ. (์ „์—ญ ์˜ค์—ผ ๊ฐ€๋Šฅ์„ฑ)

plugin-transform-runtime

npm i -D @babel/plugin-transform-runtime

  • ์ „์—ญ์˜ค์—ผ ๋ฐฉ์ง€
  • ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•๋งŒ ๋ณ€ํ™˜

babel-loader

webpack์—์„œ ์“ธ๊ฑฐ๋ฉด loader๋„ ๋‹ค์šด๋กœ๋“œ
npm i -D babel-loader

โญ๏ธ browerslist

package.json์— ํ”„๋กœ์ ํŠธ์—์„œ ์ง€์›ํ•  ๋ธŒ๋ผ์šฐ์ € ๋ฒ”์œ„ ๋ช…์‹œ

// package.json
"browerslist": [
    "> 1%", // ๊ธ€๋กœ๋ฒŒ ๋ธŒ๋ผ์šฐ์ € ์ ์œ ์œจ 1% ์ด์ƒ
    "last 2 versions", // ํ•ด๋‹น ๋ธŒ๋ผ์šฐ์ €์˜ ๋งˆ์ง€๋ง‰ 2๊ฐœ๋ฒ„์ „๋งŒ
    "not dead", // ์•„์ง ๊ตฌ๋™๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €
    "ie >= 11" // ie๋Š” 11 ์ด์ƒ๋งŒ
  ]

webpack.config.js

webpack.config ํŒŒ์ผ์— babel-loader๋ฅผ ๋“ฑ๋กํ•ด์ค˜์•ผ ํ•จ.

module.exports = {
module: {
  rules: [
    {
      test: /\.js$/,
      // exclude: /node_modules\/(?!axios)/, // axios๋ฅผ ์ œ์™ธํ•œ node_modules ๋ณ€ํ™˜ ์•ˆํ•จ
        exclude: /node_modules\/(?!(axios|xxxx|xxxx))/, // ์ œ์™ธํ•  ๋Œ€์ƒ ๋ณต์ˆ˜ ๋“ฑ๋ก
      use: 'babel-loader'
    }
}

๐Ÿก PostCSS

PostCSS๊ฐ€ ๋ญ˜๊นŒ? ๐Ÿง
๋น„๊ต์  ์ตœ์‹  ๋ฌธ๋ฒ•์„ ํ›„์ฒ˜๋ฆฌํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ›„์ฒ˜๋ฆฌ๋„๊ตฌ.

Autoprefixer

vender-prefixer๋ฅผ ์ž๋™์œผ๋กœ ๋ถ™์—ฌ์ฃผ๋Š” ํŒจํ‚ค์ง€

์„ค์น˜

npm i -D postcss autoprefixer postcss-loader

  • postcss: postcss ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๐Ÿ‘‰๐Ÿป ๊ฒฐ๊ณผ๋ฌผ๋งŒ ๋‚ด์ฃผ์ง€ ๋ณ€ํ™˜ํ•ด์ฃผ์ง„ ์•Š์Œ
  • autoprefixer: ์‹ค์ œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํŒจํ‚ค์ง€
  • postcss-loader: ์›นํŒฉ๊ณผ ์—ฐ๊ฒฐ

postcss.config.js

module.exports = {
  plugins: [
    require('autoprefixer')
  ]
}

webpack.config.js

webpack.config ํŒŒ์ผ์— postcss-loader๋ฅผ ๋“ฑ๋กํ•ด์ค˜์•ผ ํ•จ.

module.exports = {
module: {
  rules: [
    {
      test: /\.s?css$/,
      use: [ // ๋จผ์ € ํ•ด์„์ด ํ•„์š”ํ•œ ๋กœ๋”๋ฅผ ๋‚˜์ค‘์— ์ž‘์„ฑ
        'vue-style-loader',
        'css-loader', // css loader ํ•ด์คŒ
        'postcss-loader', // css ํ›„์ฒ˜๋ฆฌ๋กœ ํ”„๋ฆฌํ”ฝ์„œ ๋ถ™์—ฌ์ฃผ๊ณ 
        'sass-loader' // sass ์ „์ฒ˜๋ฆฌ ๋„๊ตฌ๋กœ css๋ฅผ ๋งŒ๋“ค๊ณ 
      ]
    }
  }
}

๐Ÿก ๋Š๋‚€์ 

Babel์€ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋™์ž‘ํ•˜๋„๋ก JS ๋ฒ„์ „์„ ๋‹ค์šด์‹œํ‚ค๋Š” transcompiler,
Webpack์€ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ์‹œ์ผœ์ฃผ๋Š” bundler,
postcss๋Š” ์ตœ์‹  ๋ฌธ๋ฒ•๋“ค์„ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” postProcessor
๋กœ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค!

๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ์—„์ฒญ๋‚˜๊ฒŒ ์œ ์šฉํ•˜์ง€๋งŒ ํŠนํžˆ๋‚˜ postcss,
css๋ฐฐ์šฐ๋ฉด์„œ vender-prefixer ๋ถ™์ด๋Š” ๊ฒŒ ์ฐธ ๊ท€์ฐฎ๋‹ค ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ
์ด๋ ‡๊ฒŒ ์œ ์šฉํ•œ ์นœ๊ตฌ๊ฐ€ ์žˆ์—ˆ๊ตฌ๋‚˜ ๐Ÿ’• ํ•˜๊ณ  ๊ฐํƒ„ํ–ˆ๋‹ค

profile
๐Ÿ’ช๐Ÿป ์•„๋Š” ๊ฑธ ์„ค๋ช…ํ•  ์ค„ ์•„๋Š” ๊ฐœ๋ฐœ์ž ๋˜๊ธฐ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€