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

C-log

๐Ÿ”งWebpack : Babel ๋ณธ๋ฌธ

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

๐Ÿ”งWebpack : Babel

4:Bee 2024. 8. 24. 14:06
728x90

  ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Babel์— ๊ด€ํ•ด์„œ ๋‹ค๋ฃจ์–ด ๋ณผ ๊ฒƒ์ด๋‹ค. Babel์€ ๋ฌด์—‡์ด๊ณ  Babel์ด ์–ด๋–ป๊ฒŒ ํƒ„์ƒ์ด ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„ ๋ณผ ๊ฒƒ์ด๋‹ค. ์šฐ์„  Babel์ด๋ผ๋Š” ์–ด์›์€ ๊ณ ๋Œ€ ํžˆ๋ธŒ๋ฆฌ ์‹ ํ™”์—์„œ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” Babelํƒ‘ ์ด์•ผ๊ธฐ์˜ Babel๋กœ ๋ถ€ํ„ฐ ๊ฐ€์ง€๊ณ  ์˜จ ๊ฒƒ์ด๋‹ค. ์ด์•ผ๊ธฐ์˜ ๊ฐ„๋‹จํ•œ ๋‚ด์šฉ์„ ์ด๋ ‡๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋Š˜ ๋†’์ด ์˜ฌ๋ผ๊ฐ€๊ธฐ ์œ„ํ•œ ํƒ‘์„ ์Œ“์•„ ์˜ฌ๋ ธ๋Š”๋ฐ ์‹ ์ด ์ด๊ฒƒ์„ ๋ง‰๊ธฐ์œ„ํ•ด ์ธ๊ฐ„๋“ค์˜ ์–ธ์–ด๋ฅผ ๋ชจ๋‘ ๋ฐ”๊ฟ” ๋†“๊ฒŒ ๋˜๋Š” ์ด์•ผ๊ธฐ๋‹ค. ์ง€๊ธˆ ์†Œํ”„ํŠธ์›จ์–ด, ๋ธŒ๋ผ์šฐ์ €์˜ ์ƒํƒœ๊ณ„๋ฅผ ๋ณด๋ฉด ์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค, ๋งฅ, ํฌ๋กฌ, ์—ฃ์ง€, ์‚ฌํŒŒ๋ฆฌ, ์›จ์ผ ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์กด์žฌํ•˜๊ณ  ์ด๊ฒƒ๋“ค์ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์–ธ์–ด๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅด๋‹ค. ๊ณผ๊ฑฐ ์‚ฌํŒŒ๋ฆฌ์—์„œ๋Š” Promise.prototype.finaly ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ์•ผ ๋ง๋กœ ํ˜ผ๋ˆ์˜ ์‹œ๋Œ€์ด๋‹ค. ์ฐธ๊ณ ๋กœ ํžˆ๋ธŒ๋ฆฌ์–ด๋กœ Babel์€ ํ˜ผ๋ˆ์„ ๋œปํ•œ๋‹ค. ์ด๋Ÿฐ ๋‹ค์–‘ํ•œ ์ƒํƒœ๊ณ„๋กœ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ํ˜„์ƒ์„ ์†Œํ”„ํŠธ์›จ์—์„  'ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•'์ด๋ผ๊ณ  ํ•˜๊ณ  ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Babel์ด ๋˜๊ฒ ๋‹ค.

ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•๊ณผ Babel

  Babel์ด ECMAScript2015+(ES6)๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ ๋ชจ๋‘๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋™ํ•™ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ˜ธํ™˜ ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ฆ‰, ํ˜„ ์ƒํƒœ๊ณ„์˜ ๋ฒˆ์—ญ๊ฐ€์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋ฉด์„œ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•์„ ํ•ด์†Œ์‹œ์ผœ ์ค€๋‹ค.


Babel

  ๋ฐ”๋ฒจ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

::CMD
npm install @babel/core @babel/cli

์„ค์น˜๋œ babel์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

::npm
npx babel src/app.js

::yarn
yarn babel src/app.js

๋ฐ”๋ฒจ์€ ์„ธ ๋‹จ๊ณ„๋กœ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. 

1. ํŒŒ์‹ฑ(Parsing)
2. ๋ณ€ํ™˜(Transforming)
3. ์ถœ๋ ฅ(Printing)


ํ”Œ๋Ÿฌ๊ทธ์ธ(Plugin)

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Babel ๋นŒ๋“œ ์„ธ๊ฐ€์ง€ ๋‹จ๊ณ„ ์ค‘ ๋‘ ๋ฒˆ์งธ ๋ณ€ํ™˜(Transforming)์„ ๋‹ด๋‹นํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ loader, plugin์„ webpack.config์—์„œ ์ปค์Šคํ…€ํ–ˆ๋“ฏ์ด Babel๋„ ์ปค์Šคํ…€์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


์ปค์Šคํ…€ ํ”Œ๋Ÿฌ๊ทธ์ธ

Babel ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ปค์Šคํ…€ํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

// my-babel-plugin.js

module.exports = function myBabelPlugin() {
  return {
    visitor: {
      Identifier(path) {
        const name = path.node.name;
        //  ๋ฐ”๋ฒจ์ด ๋งŒ๋“  AST ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
        console.log('Identifier() name: ', name)

        //  ๋ณ€ํ™˜์ž‘์—…: ์ฝ”๋“œ ๋ฌธ์ž์—ด์„ ์—ญ์ˆœ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
        path.node.name = name
          .split("")
          .reverse()
          .join("")
      }
    },
  };
}

์ดํ›„ bable์„ ๋™์ž‘์‹œํ‚ค๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

::npm
npm babel src/app.js --plugins './src/my-babel-plugin.js'

:yarn
yarn babel src/app.js --plugins './src/my-babel-plugin.js'

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

:: ์ดํ•˜ ์ƒ๋žต
at loadPlugin (D:\myclass\0_Programming-content\Frontend-Development-Environment\.yarn\cache\@babel-core-npm-7.25.2-341930f809-a425fa40e7.zip\node_modules\@babel\core\lib\config\files\plugins.js:52:20)
    at loadPlugin.next (<anonymous>) {
  code: 'ERR_MODULE_NOT_FOUND'
}

ํ•ด๋‹น ๋ฐ”๋ฒจ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ˜„์žฌ ๊ฐ•์˜์™€ ๋‹ฌ๋ฆฌ ์ž‘์„ฑ์ž๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. 'my-babel-plugin.js' ํŒŒ์ผ์ด src ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋‹ค. ๊ฐ•์˜์—์„  ์ƒ์œ„ ํด๋”์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์‹ค์Šตํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ gpt์™€ ํ•ด๊ฒฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ 'babel.config.js'ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ plugin์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ž‘์„ฑ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ–ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

//babel.config.js

module.exports = {
  plugins: ["./src/my-babel-plugin.js"]
};

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ง์„ฑํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ build ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

::CMD

yarn babel src/app.js

Identifier() name:  alert
Identifier() name:  msg
Identifier() name:  window
Identifier() name:  alert
:: ์ดํ•˜ ์ƒ๋žต
Identifier() name:  api
Identifier() name:  domain
const trela = gsm => wodniw.trela(gsm);
import * as htam from './math.js';
import './app.css';
// import npmIcon from './npm-icon.png';
// import { sum } from './math.js';
elosnoc.gol(htam.mus(1, 2));
// console.log(sum(1,2));

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

elosnoc.gol(ssecorp.vne.VNE_EDON);
elosnoc.gol(ipa.niamod);

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ด์ƒํ•œ ์ ์ด ์žˆ๋‹ค. `elosnoc.gol(htam.mus(1, 2));` ์ด๋ ‡๊ฒŒ ๊ดด์ƒํ•˜๊ฒŒ ์ฐํžˆ๋Š” ๊ฒƒ์„ ํ™•์ธ ํ• ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด์œ ๋Š” ์šฐ๋ฆฌ๊ฐ€ my-babel-plugin.js์—์„œ `//๋ณ€ํ™˜ ์ž‘์—…~`์ด๋ผ๊ณ  ์ฃผ์„์นœ ์•„๋ž˜ ์ฝ”๋“œ์—์„œ path๋กœ ๋ถ€ํ„ฐ ์ ‘๊ทผ๋œ name๋“ค์„ ๋ชจ๋‘ reverseํ•˜๊ณ  splitํ•˜๋ฉด์„œ join์œผ๋กœ ํ•ฉ์น˜๋ฉด์„œ ๋ฐœ์ƒ๋œ ๊ฒฐ๊ณผ๋ฌผ์ธ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” const ํƒ€์ž…์„ ์ „๋ถ€ var๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ปค์Šคํ…€ plugin์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ๋‹ค.

// my-babel-plugin

module.exports = function myBabelPlugin() {
  return {
    visitor: {
      VariableDeclaration(path) {
      //๋ฒˆ์ˆ˜์— ์–ด๋–ค ์ž๋ฃŒํ˜•์œผ๋กœ ์„ ์–ธ์ด ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” log
        console.log('VariableDeclaration() kind', path.node.kind);

        //const๋ฅผ var๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์กฐ๊ฑด๋ฌธ
        if (path.node.kind === 'const') {
          path.node.kind = 'var'
        }
      }
    },
  };
}

์ด๋ ‡๊ฒŒ ์„ค์ •์„ ํ•˜๊ณ  ํ•ด๋‹น jsํŒŒ์ผ์„ babel.config.js์— require๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ •ํ™•ํ•˜๊ฒŒ ์‚ฝ์ž…ํ•ด์„œ ์‹คํ–‰ ์‹œ์ผœ๋ณด์ž.

// babel.config.js

const myBabelPlugin = require('./src/my-babel-plugin.js');

module.exports = {
  plugins: [myBabelPlugin]
};

์ด์ œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ๊ธฐ์กด ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅธ CMD ๋ช…๋ น์„ ํ•ด์•ผํ•œ๋‹ค.

::CMD
//npm
npm babel src/app.js

//yarn
yarn babel src/app.js

์ด์ œ ์‹คํ–‰์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

::CMD

VariableDeclaration() kind const
var alert = msg => window.alert(msg);
import * as math from './math.js';
import './app.css';
// 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);

 

 

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ฐฉ์‹์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๋ฏธ babel์•ˆ์— ์ œ๊ณต์„ ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ block-scoping์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.


block-scoping

block-scoping์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณด์ž.

::CMD
npm install @babel/plugin-transform-block-scoping

yarn add @babel/plugin-transform-block-scoping
// babel.config.js

const blockScoping = require('@babel/plugin-transform-block-scoping')
module.exports = {
  plugins: [blockScoping]
};
::CMD

::npm for build
npx babel src/app.js --out-file dist/app.js
::yarn for build
yarn babel src/app.js --out-file dist/app.js

::or

::npm for direct
npx babel src/app.js
::yarn for direct
yarn babel src/app.js

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

::CMD

var alert = msg => window.alert(msg);
import * as math from './math.js';
import './app.css';
// 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);

์ด๋ฒˆ์—๋Š” ํ™”์‚ดํ‘œ๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.


arrow-functions

ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์ฃผ์ž

::CMD

::npm
npm install @babel/plugin-transform-arrow-functions

::yarn
yarn add @babel/plugin-transform-arrow-functions
//babel.config.js

// const myBabelPlugin = require('./src/my-babel-plugin.js');
const blockScoping = require('@babel/plugin-transform-block-scoping');
const arrowFunction = require('@babel/plugin-transform-arrow-functions');
module.exports = {
  plugins: [blockScoping, arrowFunction]
};

์ด์ œ ์‹คํ–‰์„ ์‹œ์ผœ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

::CMD

var alert = function (msg) {
  return window.alert(msg);
};
import * as math from './math.js';
import './app.css';
// 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);

strict-mode

๊ผญ ์„ค์น˜ํ•ด์•ผํ•˜๊ฑฐ๋‚˜ ๊ผญ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์•„๋‹ˆ์ง€๋งŒ ์—„๊ฒฉ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์— ์ข‹๋‹ค. ์ด์— use strict ๊ตฌ๋ฌธ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์šฉ์ด ๋  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋จผ์ € ํŒจํ‚ค์ง€ ์„ค์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

::CMD

::npm
npm install @babel/plugin-transform-strict-mode

::yarn
yarn add @babel/plugin-transform-strict-mode
// babel.config.js

const blockScoping = require('@babel/plugin-transform-block-scoping');
const arrowFunction = require('@babel/plugin-transform-arrow-functions');
const strictMode = require('@babel/plugin-transform-strict-mode');
module.exports = {
  plugins: [blockScoping, arrowFunction, strictMode]
};

์ด์ œ ์‹คํ–‰์„ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

::CMD

"use strict";

var alert = function (msg) {
  return window.alert(msg);
};
import * as math from './math.js';
import './app.css';
// 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);

์ž˜ ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋‚˜ํ•˜๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ์ž‘์—…์— ์žˆ์–ด์„œ ๋งค์šฐ ๋น„ํ˜„์‹ค์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ปค์Šคํ…€ ํ”„๋ฆฌ์…‹์„ ์ด์šฉํ•ด์„œ ํ•˜๋‚˜์˜ ํ”„๋ฆฌ์…‹์œผ๋กœ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.


์ปค์Šคํ…€ ํ”„๋ฆฌ์…‹

์šฐ์„  presets์œผ๋กœ ๊ด€๋ฆฌํ•  js ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ด์•„๋‚ด๋ฉด ๋œ๋‹ค.

// my-babel-preset.js

const blockScoping = require('@babel/plugin-transform-block-scoping');
const arrowFunction = require('@babel/plugin-transform-arrow-functions');
const strictMode = require('@babel/plugin-transform-strict-mode');

module.exports = function myBabelPreset() {
  return {
    plugins: [blockScoping, arrowFunction, strictMode]
  }
};

๊ทธ๋ฆฌ๊ณ  babel.config.js์— ํ•ด๋‹น presets์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

//babel.config.js

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

 

 

 

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰์„ ํ•˜๋ฉด ์•„๊นŒ์™€ ๋ณ€ํ•จ์—†์ด ์—๋Ÿฌ ์—†์ด ์ž˜ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ build๋ฅผ ํ•ด๋ณด๋ฉด ๋‚ด๊ฐ€ babel์— ์„ค์ •ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด build๋œ ํŒŒ์ผ์— ์ž˜ ์„ค์ •์ด ๋œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ฆฌ์…‹์„ ์„ค์ •ํ•  ๊ฒƒ์ด๋‹ค. ์˜ค๋Š˜์˜ ํฌ์ŠคํŒ…์€ babel์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด๋‹ค.

728x90
Comments