: ๋๋ฌด๋ฅผ ํ๋ค์ด ์๊ฐ์ง๋ฅผ ํธ์ด๋ด๋ฏ ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ์ต์ ํ ์์
import
, export
๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋)Webpack์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ํจ๊ณผ์ ์ผ๋ก ํธ๋ฆฌ์์ดํน์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
import
๊ตฌ๋ฌธ์ ์ด์ฉํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํ ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด๊ฐ ์๋ ํ์ํ ๋ชจ๋๋ง ๋ถ๋ฌ์จ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ฒ๋ค๋ง ๊ณผ์ ์์ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์ฝ๋๋ง ํฌํจ์ํค๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ์์ดํน์ ํ ์ ์๋ค.
import React from 'react'; // โ
import { useState, useEffect } from 'react; // โญ๏ธ
Babel
: JavaScript ๋ฌธ๋ฒ์ด ๊ตฌ ๋ฒ์ ๋ธ๋ผ์ฐ์ ์์๋ ํธํ์ด ๊ฐ๋ฅํ๋๋ก ES5 ๋ฌธ๋ฒ์ผ๋ก ๋ณํํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (์ปดํ์ผ๋ฌ)
์ด๋, ES5 ๋ฌธ๋ฒ์ import
๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์, commonJS ๋ฌธ๋ฒ์ require
๋ก ๋ณ๊ฒฝ์ํจ๋ค.
require
๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ๋ชจ๋์ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ 1๋ฒ์์ ์์ฑํ ๊ฒ์ฒ๋ผ ํ์ํ ๋ชจ๋๋ง ๋ถ๋ฌ์ค๋ ์ฝ๋๋ฅผ ์์ฑํด๋ ์์ฉ์ด ์์ด์ง๋ค.
โก๏ธ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Babelrc ํ์ผ์ ์๋์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ES5 ๋ฌธ๋ฒ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋ง์ ์ ์๋ค.
// .babelrc
{
โpresetsโ: [
[
โ@babel/preset-envโ,
{
"modules": false // modules ๊ฐ์ false๋ก ์ค์ ํ๋ฉด ES5 ๋ฌธ๋ฒ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋ง๊ณ ,
// ๋ฐ๋๋ก true๋ก ์ค์ ํ๋ฉด ํญ์ ES5 ๋ฌธ๋ฒ์ผ๋ก ๋ณํํ๋ค.
}
]
]
}
Webpack์ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ผ์ผํฌ ์ ์๋ ์ฝ๋์ ๊ฒฝ์ฐ, ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ผ๋ ํธ๋ฆฌ์์ดํน์์ ์ ์ธ์ํจ๋ค.
// ์ฌ์ดํธ ์ดํํธ๋ฅผ ์ผ์ผํค๋ ์ฝ๋ ์์
// addCrew() ํจ์๋ ํจ์ ์ธ๋ถ์ ์๋ ๋ฐฐ์ด `crews`๋ฅผ ๋ณ๊ฒฝ์ํจ๋ค.
const crews = ['kim', 'park'];
const addCrew = (name) => {
crews.push(name);
}
Webpack์ ์์ ํจ์๊ฐ ์๋, ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ผ์ผํค๋ ํจ์๋ฅผ ํธ๋ฆฌ์์ดํน์ผ๋ก ์ ์ธํ๋ ๊ฒฝ์ฐ, ๋ฌธ์ ๊ฐ ์๊ธธ ์๋ ์๋ค๊ณ ํ๋จํ์ฌ ๋ฒ๋ค๋งํ ๋ ํด๋น ์ฝ๋๋ฅผ ์ ์ธ์ํค์ง ์๋๋ค. (์ฆ, ์ฌ์ฉํ์ง ์์๋ ๋ฒ๋ค๋ง์ํจ๋ค..)
โก๏ธ ์ด๋, package.json
ํ์ผ์์ sideEffects
๋ฅผ ์ค์ ํ์ฌ, ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์์ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ ํธ๋ฆฌ์์ดํน์ ํด๋ ๋๋ค๊ณ Webpack์๊ฒ ์๋ ค์ค ์ ์๋ค.
// package.json
{
"name": "tree-shaking",
"version": "1.0.0",
"sideEffects": false
}
ํน์ ์๋์ฒ๋ผ ์์ฑํ์ฌ ํน์ ํ์ผ์์๋ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๋ ค์ค ์ ์๋ค.
// package.json
{
"name": "tree-shaking",
"version": "1.0.0",
"sideEffects": ["./src/components/NoSideEffect.js"]
}
๋ณดํต 3๋ฒ๊น์ง ์์ฑํ๋ฉด ํธ๋ฆฌ์์ดํน์ด ์ ์๋ํ๋ค.
๊ทธ๋ผ์๋ ํธ๋ฆฌ์์ดํน์ด ์ ์ฉ๋์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ฉด, ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ES5 ๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ณ ์์ง ์์์ง ํ์ธํด์ผ ํ๋ค.
์ด ๊ฒฝ์ฐ์๋ ํด๋น ๋ชจ๋์ ๋์ฒดํ ์ ์๋, ES6 ๋ฌธ๋ฒ์ ์ง์ํ๋ ๋ค๋ฅธ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.