๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

๐Ÿ”งWebpack : ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Babel Plugin(Preset) ๋ณธ๋ฌธ

โš›๏ธReact/๐Ÿ”งFront-Dev-Environment

๐Ÿ”งWebpack : ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Babel Plugin(Preset)

4:Bee 2024. 8. 30. 19:12
728x90

  ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„์— ์ด์–ด์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Preset์„ ์„ค์น˜ํ•ด๋ณด๊ณ  ์‹ค์Šตํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. Babel์€ ๋ณดํ†ต ์‹ค๋ฌด์—์„œ Preset์„ ์ž˜ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ preset-env, preset-flow, preset-react, preset-typescript ์ด๋ ‡๊ฒŒ ๋„ค๊ฐ€์ง€๋ฅผ ์ค‘์ ์œผ๋กœ ์‚ดํŽด ๋ณผ ๊ฒƒ์ด๋‹ค.


preset-env

์„ค์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

:: CMD

yarn add @babel/preset-env

์ดํ›„ babel.configํŒŒ์ผ์—์„œ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ ์ปค์Šคํ…€ babel์€ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

//babel.confing.js

const myBabelPreset = require('./my-babel-preset');
module.exports = {
  presets: [
    '@babel/preset-env'
  ]
};

๊ทธ๋ฆฌ๊ณผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

::CMD

yarn babel src/app.js

๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

::CMD

"use strict";

function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
var math = _interopRequireWildcard(require("./math.js"));
require("./app.css");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = 
{ __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
var alert = function alert(msg) {
  return window.alert(msg);
};
// import npmIcon from './npm-icon.png';
// import { sum } from './math.js';
console.log(math.sum(1, 2));
// console.log(sum(1,2));

// document.addEventListener('DOMContentLoaded', () => {
//   document.body.innerHTML = `<img src="${npmIcon}"/>`
// });

console.log(process.env.NODE_ENV);
console.log(api.domain)

๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ ์ด์ „๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ด์— ์ด์ „์— ์ปค์Šคํ…€ํ–ˆ๋˜ ๋ฐฉ์‹์ธ 'use Strict'๋ชจ๋“œ์™€ '์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜'๊ณผ 'let์„ var๋กœ ๋ณ€ํ™˜'ํ•ด์ฃผ๋Š” ๊ฒƒ ๋“ฑ์„ ์œ„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ๊ฒƒ์ด ํ•ด๊ฒฐ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์šฐ๋ฆฌ๋Š” ์•Œ ์ˆ˜ ์žˆ๋‹ค.


preset-env๋Š” ๋ฌด์—‡์ธ๊ฐ€

ํƒ€๊ฒŸ ๋ธŒ๋ผ์šฐ์ ธ(TargeBrowser)

  ์šฐ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ํฌ๋กฌ ์ตœ์‹  ๋ฒ„์ „๋งŒ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฐ€์ •์—์„œ ๋‹ค๋ฅธ ์ต์Šคํ”Œ๋กœ๋Ÿฌ์™€ ๊ฐ™์€ ๋ณ€ํ™˜์€ ๋ถˆํ•„์š”ํ•˜๊ธฐ์— ์„ค์ •๋œ target๋งŒ์„ ์œ„ํ•œ ์ตœ์ ์˜ ์ฝ”๋“œ๋“ค์„ ์ถœ๋ ฅ, ์„ค์ •ํ•ด์ค€๋‹ค.

const myBabelPreset = require('./my-babel-preset');

module.exports = {
  presets: [
    ['@babel/preset-env', {
      targets: {
        chrome: '79'
      }
    }]
  ]
};

๊ฒฐ๊ณผ ๋˜ํ•œ ์ž˜ ์ถœ๋ ฅ๋œ๋‹ค.('๋”๋ณด๊ธฐ ํด๋ฆญ')

๋”๋ณด๊ธฐ

:: yarn babel src/app.js
"use strict";

var math = _interopRequireWildcard(require("./math.js"));
require("./app.css");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
const alert = msg => window.alert(msg);
// import npmIcon from './npm-icon.png';
// import { sum } from './math.js';
console.log(math.sum(1, 2));
// console.log(sum(1,2));

// document.addEventListener('DOMContentLoaded', () => {
//   document.body.innerHTML = `<img src="${npmIcon}"/>`
// });

console.log(process.env.NODE_ENV);
console.log(api.domain);

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์‹œํ•ด์•ผํ•  ๊ฒƒ์€ const์ด๋‹ค. ๊ทธ ์ด์œ ๋Š” ํฌ๋กฌ 79ver์€ const๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „๊ณผ ๋‹ฌ๋ฆฌ var๋กœ ๋ณ€ํ™˜๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ chrome ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ์ต์Šคํ”Œ๋กœ๋Ÿฌ๊นŒ์ง€ ์ง€์› ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

/*--์ดํ•˜ ์ƒ๋žต--*/
presets: [
    ['@babel/preset-env', {
      targets: {
        chrome: '79',
        ie: '11'
      }
    }]
  ]

๋ธŒ๋ผ์šฐ์ € ๊ด€๋ จ ์ •๋ณด๋Š” ๋‹ค์Œ ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.(๊ฒ€์ƒ‰ ์˜ˆ์‹œ ex. arrow)

 

Can I use... Support tables for HTML5, CSS3, etc

 

caniuse.com


ํด๋ฆฌํ•„(Polyfill)

  Promise๋ฅผ app.js์— ์ถ”๊ฐ€๋ฅผ ํ•˜๊ณ  babael์„ ์‹คํ–‰ํ•˜๋ฉด ๋ณ€ํ™˜๋œ ๊ฒฐ๊ณผ๋ฌผ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ–ˆ์ง€๋งŒ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ™•์ธ์„ ํ•ด๋ณด๋ฉด ๊ทธ๋ ‡์ง€ ๋ชปํ•œ ๊ฒƒ์„ ํ•™์ธ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด์— ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (๋งŒ์•ฝ ๋ณ€ํ™˜๋˜์ง€ ์•Š์€ Promise๋ฅผ ์›น์—์„œ ํ™•์ธํ•˜๋ฉด SCRIPT5009์™€ ๊ฐ™์€ error๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.)

ํด๋ฆฌํ•„(Polyfill) ์€ ๋ฌด์—‡์ธ๊ฐ€?

  ์šฐ๋ฆฌ๊ฐ€ ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด Promise๋ฅผ ECMAScript5๋กœ ๋ณ€ํ™˜ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ ํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ๋ชปํ–ˆ๋‹ค. ์ด์œ ๋Š” babel์€ ECMAScript2015+๋ฅผ ECMAScript5 ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋งŒ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํด๋ฆฌํ•„์ด๋ผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์œ„์—์„œ ๋ณ€ํ™˜ํ•˜์ง€ ๋ชปํ•œ ์ฝ”๋“œ ์กฐ๊ฐ๋“ค์„ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด๊ฒฐ ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ Promise๋Š” ECMAScript5 ๋ฒ„์ „์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ ECMAScript5 ๋ฒ„์ „์œผ๋กœ ๊ตฌํ˜„์€ ํ•  ์ˆ˜ ์žˆ๋‹ค. (core-js promise ์ฐธ๊ณ )

env ํ”„๋ฆฌ์…‹์€ ํด๋ฆฌํ•„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค.

๋”ฐ๋ผ ์•„๋ž˜์™€ ๊ฐ™์ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์ค€๋‹ค.

::CMD

yarn add core-js@3
const { version } = require('webpack');
const myBabelPreset = require('./my-babel-preset');
module.exports = {
  presets: [
    [
      '@babel/preset-env', {
        targets: {
          chrome: '79',  //79, 60
          // ie: '11'
        },
        useBuiltIns: "usage", // ํด๋ฆฌํ•„ ์‚ฌ์šฉ ๋ฐฉ์‹ ์ง€์ • ๊ธฐ๋ณธ๊ฐ’์€ false
        corejs: {
          // ํด๋ฆฌํ•„ ๋ฒ„์ „ ์ง€์ •
          version: 3,
        },
        /**
         * useBuiltIns: "usage", // ํด๋ฆฌํ•„ ์‚ฌ์šฉ ๋ฐฉ์‹ ์ง€์ • ๊ธฐ๋ณธ๊ฐ’์€ false
        corejs: 3, // ํด๋ฆฌํ•„ ๋ฒ„์ „ ์ง€์ •
         */
      }
    ]
  ]
};

  ์œ„์™€ ๊ฐ™์ด ์„ค์ •์„ ์ž˜ ํ•ด์ฃผ๊ณ  babel์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์›์ธ์„ ์ฐพ๋Š”๋ฐ ์ •๋ง ๋งŽ์€ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ–ˆ๋‹ค. html์— import๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ babel์„ webpack์—์„œ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–…๋ณด๊ณ  ์ตœ๋Œ€ํ•œ ๊ตฌ๊ธ€๋ง์—์„œ๋„ ์ตœ์‹  ๊ธ€๋“ค๋งŒ ์ฐพ์•„๋ณด๋ฉฐ ๋ง์ด๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์›์ธ์„ ์ฐพ์€ ๊ฒฝ๋กœ๋Š” 'Can I use'์—์„œ ํ™•์ธ ํ• ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

  chrome์˜ 79๋ฒ„์ „์„ ์ง€์ •ํ•˜๊ณ  ie๋ฅผ 11๋ฒ„์ „์œผ๋กœ ์ง€์ •์„ ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž‘์„ฑ์ž๋Š” ie๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ˆ ํ•ด๋‹น targets๋ฅผ ์‚ญ์ œ๋ฅผ ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ ์„  promise๊ฐ€ ๋ณ€ํ™˜๋˜๊ธธ ๋ฐ”๋ผ๊ณ  ์žˆ์—ˆ๋‹ค. ์ฆ‰, chrome 79์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ promise ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋ณ€ํ™˜์„ ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ie๋ฅผ 11๋ฒ„์ „์„ ์ถ”๊ฐ€ ํ–ˆ๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ require๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ–ˆ๋‹ค.

/*--์ดํ•˜ ์ƒ๋žต--*/
    targets: {
      chrome: '79',  //79, 60
      ie: '11'
    },
::yarn babel src/app.js

"use strict";

require("core-js/modules/es.object.to-string.js");
require("core-js/modules/es.promise.js");
var alert = function alert(msg) {
  return window.alert(msg);
};
new Promise(function (resolve) {
  return resolve('test');
}).then(console.log);

  (์—ฌ๊ธฐ์„œ ์˜๋ฌธ ์™œ chrome '60'์œผ๋กœ ์„ค์ •์„ ํ•˜๋ฉด require๋ฌธ์œผ๋กœ ํŠธ๋ Œ์ œ์ด์…˜์„ ํ• ๊นŒ? 'Can I Use'์—์„  '60' ๋ฒ„์ „๋„ promise๋ฅผ ์ถฉ๋ถ„ํžˆ ์ง€์›์„ ํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ๋ง์ด๋‹ค. ์ด์œ ๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ•˜๋‹ค. ํด๋ฆฌํ•„์€ ๋ฒ„์ „๋งˆ๋‹ค ์•ˆ์ „ํ•˜๊ฒŒ ์ฝ”๋“œ๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์›€์„ ์ฃผ๋Š” ์—ญํ• ์ด๋‹ค. ์ฆ‰, 'Can I Use'์—์„œ promise๋ฅผ ์™„์ „ํžˆ ์ง€์› ํ•œ๋‹คํ•ด๋„ ์ผ๋ถ€ ์•ˆ์ •์ ์ธ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํด๋ฆฌํ•„์˜ ํŒ๋‹จํ•˜๊ฒŒ ํŠธ๋ Œ์ œ์ด์…˜์„ ํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ฆฌํ•„์„ ์ž˜ ์„ค์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฌธ์ œ ์—†์ด ๋™์ž‘์„ ํ•  ๊ฒƒ์ด๋‹ค.)


์›นํŒฉ์œผ๋กœ ํ†ตํ•ฉํ•˜๊ธฐ

์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ”๋ฒจ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์›นํŒฉ์œผ๋กœ ํ†ตํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ์›นํŒฉ์œผ๋กœ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” babel-loader๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค.

::CMD

yarn add babel-loader

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด webpack.config๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

//webpack.config.js

/*--์ดํ•˜ ์ƒ๋žต--*/
  module: {
    rules: [
      {
        test: /\.js$/,
        // use: [
        //   path.resolve('./my-webpack-loader.js')
        // ],
        exclude: /node_modules/,  // node_modules๋Š” ์ œ์™ธ
        loader: 'babel-loader', //๋ฐ”๋ฒจ ๋กœ๋” ์ถ”๊ฐ€
      },
      {
        test: /\.css$/,
        use: [
          process.env.NODE_ENV === 'production'
            ? MiniCssExtractPlugin.loader
            : 'style-loader', 'css-loader'
        ],
      },
/*--์ดํ•˜ ์ƒ๋žต--*/
::CMD

yarn add core-js@3

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๊ณ  yanr build๋ฅผ ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ build๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ• ์ˆ˜ ์žˆ๋‹ค. ์›๋ž˜๋ผ๋ฉด corejs๊ฐ€ ์„ค์น˜๊ฐ€ ๋˜์–ด ์žˆ์œผ๋ฉด ์•ˆ๋˜๋Š” ์ƒํƒœ์—์„œ build๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ž‘์„ฑ์ž๋Š” ์ด์ „์— corejs๋ฅผ ์„ค์น˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ์ ์œผ๋กœ build๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •๋ฆฌํ•˜์ž๋ฉด ๋ฐ”๋ฒจ ์ฝ”์–ด๋Š” ํŒŒ์‹ฑ๊ณผ ์ถœ๋ ฅ๋งŒ ๋‹ด๋‹นํ•œ๋‹ค. ๋ณ€ํ™˜ ์ž‘์—…(ํŠธ๋ ˆ์Šค์ ์…˜)์„ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ• ์€ ๋ฐ”๋ฒจ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ชจ์•„ ๋†“์€ ์„ธํŠธ๋ฅผ ํ”„๋ฆฌ์…‹์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ดํ›„ ๋ฐ”๋ฒจ์ด ๋ณ€ํ™˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ฝ”๋“œ๋Š” ํด๋ฆฌํ•„์ด ์ž”์—ฌ ์ฝ”๋“œ ์กฐ์ž‘๋“ค์„ ๊ฒฐ๊ณผ๋ฌผ์— ๋กœ๋”ฉํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ Œ๋”๋ง๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ›์•„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ babel-loader๋กœ ์›นํŒฉ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์„œ ํ›จ ๋‹จ์ˆœํ•œ ์ž๋™ํ™”๋œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ๋‹ค.


SUMMARY

์ „๋ฐ˜์ ์œผ๋กœ ์ค‘์š”ํ•œ ๋ชจ๋“  ์„ค์ •๋“ค์„ ํ•™์Šตํ–ˆ๋‹ค. ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๊ณ  ์ปค์Šคํ…€ ํ•˜๋ฉด์„œ ๋Š๋‚€์ ์€ distํด๋”์˜ ์„ค์ •๊ณผ build๋œ ๊ฒฐ๊ณผ๋ฌผ๊ณผ out, entry์„ค์ •์ด ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ๋งŽ์œผ๋ฉด ์–ด๋– ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์ •ํ•ด๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์–ด์ฉŒ๋ฉด ์ด ๋ชจ๋“  ๊ฐ•์˜ ์ค‘ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐ•์˜๋Š” ์ดˆ๋ฐ˜ ์„ธํŒ… ํ™˜๊ฒฝ ๊ตฌ์„ฑ์˜ ๋Œ€ํ•œ ์ˆ˜์—…์ด์ง€ ์•Š์„๊นŒ ํ•œ๋‹ค.


REFERNCE

 

๋˜‘๋˜‘ํ•˜๊ฒŒ ๋ธŒ๋ผ์šฐ์ € Polyfill ๊ด€๋ฆฌํ•˜๊ธฐ

ํ˜„๋Œ€์ ์ธ JavaScript๋ฅผ ์“ฐ๋ฉด์„œ๋„ ๋„“์€ ๋ฒ”์œ„์˜ ๊ธฐ๊ธฐ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ Polyfill์„ ์–ด๋–ป๊ฒŒ ๋˜‘๋˜‘ํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

toss.tech

 

CRA ํ™˜๊ฒฝ์—์„œ ํด๋ฆฌํ•„ ์„ค์ •ํ•˜๊ธฐ (feat. core-js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

Create React App(CRA)์€ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. CRA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐ”๋ฒจ(Babel) ์„ค์ •์ด ์ ์šฉ๋˜๋ฉฐ, ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•(ES6+)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ

velog.io

 

webpack์—์„œ polyfill ์„ค์ •ํ•˜๊ธฐ

๋“ค์–ด๊ฐ€๋ฉฐ ์ด ํฌ์ŠคํŒ… ์— ์ด์–ด์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” webpack์—์„œ polyfill์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. webpack ์— ๋Œ€ํ•œ ์„ค๋ช… ์—ฌ๊ธฐ ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ…

chamdom.blog

 

 

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ์ƒ๊ฒจ์„œ ์›์ธ์„ ์ฐพ๋‹ค๊ฐ€ ํด๋ฆฌํ•„ ๋ฌธ์ œ๋ผ๋Š”๊ฑธ ๊นจ๋‹ซ๊ณ  ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Core.js

simsimjae.medium.com

 

728x90

'โš›๏ธReact > ๐Ÿ”งFront-Dev-Environment' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐Ÿ”งWebpack : Babel  (0) 2024.08.24
๐Ÿ”งWebpack : ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Plugin  (0) 2024.08.20
๐Ÿ”งWebpack : Plugin  (0) 2024.08.20
๐Ÿ”งWebpack : url-loader  (0) 2024.07.19
๐Ÿ”งWebpack : file-loader  (0) 2024.07.17
Comments