Babelκ³Ό WebPackμ μ΄μ©ν ES6+/ES.NEXT κ°λ° νκ²½ ꡬμΆ
- 맀λ
μλ‘κ² λμ
λλ ES6μ΄μμ λ²μ (
ES6+
)κ³Ό μ μ λ¨κ³μ μλ ES μ μ μ¬μ(ES.NEXT
)μ λΈλΌμ°μ μ λ°λΌ μ§μμ¨μ΄ μ κ°κ° - λ°λΌμ μ΅μ μ¬μμΌλ‘ νλ‘μ νΈλ₯Ό μ§ννλ €λ©΄ ꡬν λΈλΌμ°μ μμ λ¬Έμ μμ΄ λμ μν€κΈ° μν κ°λ°νκ²½μ ꡬμΆνλ κ²μ΄ νμνλ€.
- λλΆλΆμ νλ‘μ νΈκ° λͺ¨λμ μ¬μ©νλ―λ‘ λͺ¨λ λ‘λλ νμνλ€.
- λ€μκ³Ό κ°μ μ΄μ λ‘
ESM
λ³΄λ€ λ³λμ λͺ¨λ λ‘λλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ - IEλ₯Ό ν¬ν¨ν ꡬν λΈλΌμ°μ λ ESMμ μ§μνμ§ μλλ€.
ESM
μ μ¬μ©νλλΌλ νΈλμ€ νμΌλ§μ΄λ λ²λ€λ§μ΄ νμν κ²μ λ³ν¨ μμESM
μ΄ μμ§ μ§μνμ§ μλ κΈ°λ₯(bare import λ±..)μ΄ μ‘΄μ¬
Babel
Babel
μ νΈλμ€ νμΌλ§ λκ΅¬λ‘ μ΅μ μ¬μμ μμ€μ½λλ₯Ό ꡬν λΈλΌμ°μ μμλ λμνλES5
μ¬μμ μ½λλ‘ λ³ν ν΄μ£Όλ λꡬ μ λλ€.
μ€μΉ
npm install --save-dev @bable/core @babel/cli
Babel ν리μ μ€μΉμ babel.config.json μ€μ
@babel/preset-env
μ€μΉ : ν¨κ» μ¬μ©λμ΄μΌ νλ νλ¬κ·ΈμΈμ λͺ¨μ λ κ²Babel
μ΄ μ 곡νλ 곡μ ν리μ (official preset
)@babel/preset-env
@babel/preset-flow
@babel/preset-react
@babel/preset-typescript
npm install --save-dev @babel/preset-env
- μ€μΉν babel.config.json νμΌ μμ±
{
"presets": ["@babel/preset-env"]
}
νΈλμ€νμΌλ§
- νΈλμ€νμΌλ§ λͺ λ Ήμ΄ package.jsonμ λ±λ‘
"scripts": {
"bulid": "babel src/js -w -d dist/js"
},
src/js
νκ² ν΄λμ μλ λͺ¨λ jsνμΌμ νΈλμ€νμΌλ§νμ¬dist/js
ν΄λμ μ μ₯νλ λͺ λ Ήμ΄- -w μ΅μ : --watch μ΅μ μ μΆμ½, νκΉν΄λμ μλ λͺ¨λ js νμΌλ€μ λ³κ²½μ κ°μ§νμ¬ μλμΌλ‘ νΈλμ€νμΌ
- -d μ΅μ : --out-dir μ΅μ μ μΆμ½, νΈλμ€νμΌλ§ κ²°κ³Όλ¬Όμ΄ μ μ₯λ ν΄λλ₯Ό μ§μ , μ§μ λ ν΄λκ° μ‘΄μ¬νμ§ μμΌλ©΄ μλμΌλ‘ μμ±
Babel νλ¬κ·ΈμΈ μ€μΉ
- λ°λ²¨ ννμ΄μ§μμ νλ¬κ·ΈμΈ κ²μ κ°λ₯
@babel/plugin-proposal-class-properties
:public/private
ν΄λμ€ νλλ₯Ό μ§μνλ νλ¬κ·ΈμΈ μΆκ°λ‘ μ€μΉν΄μ€
λΈλΌμ°μ μμ λͺ¨λ λ‘λ© ν μ€νΈ
- λΈλΌμ°μ λ CommonJS λ°©μμ require ν¨μλ₯Ό μ§μνμ§ μμμΌλ‘ λ³λμ μ€μ μμ΄ μ€ννλ©΄ μλ¬λ¨
- λ Έλ λͺ¨λμ΄ μλλΌ λΈλΌμ°μ μ ES6 λͺ¨λμ μ¬μ©νλλ‘ Babelμ μ€μ ν μλ μμΌλ Webpackμ ν΅ν΄ ν΄κ²°νλ κ²μ΄ μ’μ
Webpack
Webpack
μ μμ‘΄ κ΄κ³μ μλ μλ°μ€ν¬λ¦½νΈ, CSS, μ΄λ―Έμ§ λ±μ 리μμ€λ€μ νλμ νμΌλ‘ λ²λ€λ§ νλ λͺ¨λ λ²λ€λ¬Webpack
μ μ¬μ©νλ©΄ μμ‘΄ λͺ¨λμ΄ νλμ νμΌλ‘ λ²λ€λ§ λλ―λ‘ λ³λμ λͺ¨λλ‘λκ° νμ μλ€.- HTML νμΌμμ μ¬λ¬κ°μ script νκ·Έλ‘ μλ°μ€ν¬λ¦½νΈ νμΌμ λ‘λν΄μΌνλ λ²κ±°λ‘μλ μ¬λΌμ§λ€.
babel-loader μ€μΉ
Webpack
μ΄ λͺ¨λμ λ²λ€λ§ν λBabel
μ μ¬μ©νμ¬ES6+
/ES.NEXT
μ¬μμ μμ€μ½λλ₯ΌES5
μ¬μμ μμ€μ½λλ‘ νΈλμ€νμΌλ§νλλ‘babel-loader
μ€μΉ.
npm install --save-dev babel-loader
webpack.config.js μ€μ νμΌ μμ±
const path = require('path');
module.exports = {
entry: './src/js/main.js',
output:{
path: path.resolve(__dirname, 'dist'),
filename: 'js/bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
include: [path.resolve(__dirname, "src/js")],
exclude: /node_modules/,
use:{
loader: "babel-loader",
options: {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties']
}
}
}
]
},
devtool: 'source-map',
mode: 'development'
}
babel-polyfill μ€μΉ
- Babelμ μ¬μ©νμ¬ μ΅μ μ¬μμ μ½λλ₯Ό ES5 μ¬μμ μ½λλ‘ νΈλμ€νμΌλ§ν΄λ λΈλΌμ°μ κ° μ§μνμ§ μλ μ½λκ° λ¨μμμ μ μλ€.
Promise
,Object.assign
,Array.from
λ±κ³Ό κ°μ΄ES5
μ¬μμΌλ‘ λ체ν μ μλ κΈ°λ₯μ νΈλμ€νμΌλ§ λμ§ μμ.IE
κ°μ ꡬν λΈλΌμ°μ μμλ μμ κ°μ κ°μ²΄λ λ©μλλ₯Ό μ¬μ©νκΈ° μν΄μ@babel/polyfill
μ€μΉ.
@babel-polyfillμ κ°λ° νκ²½μμλ§ μ¬μ©νλ κ²μ΄λΌ μ€μ μ΄μ νκ²½ μμλ μ¬μ©ν΄μΌ νλ―λ‘ --save-dev μ΅μ μ§μ νμ§ μμ
ES6
μimport
λ₯Ό μ¬μ©νλ κ²½μ° μ§μ μ μ μ λμμ ν΄λ¦¬νμ λ‘λ
import "@babel/polyfill";
import { pi, power, Foo } from "./lib";
Webpack
μ μ¬μ©νλ κ²½μ°webpack.config.js
νμΌμentry
λ°°μ΄μ ν΄λ¦¬νμ μΆκ°.
module.exports = {
entry: ["@babel/polyfill", "./src/js/main.js"],
};
'javascript > π study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[11μ£Όμ°¨ μ€ν°λ]48μ₯-λͺ¨λ (0) | 2022.04.08 |
---|---|
[11μ£Όμ°¨ μ€ν°λ]47μ₯-μλ¬ μ²λ¦¬ (0) | 2022.04.08 |
[11μ£Όμ°¨ μ€ν°λ]46μ₯-μ λλ μ΄ν°μ async / await (0) | 2022.04.08 |
[10μ£Όμ°¨ μ€ν°λ]45μ₯-νλ‘λ―Έμ€ (0) | 2022.04.02 |
[10μ£Όμ°¨ μ€ν°λ]44μ₯-REST API (0) | 2022.04.02 |
λκΈ