β μ μ¬μ§μ μ΄λ±νκ΅ μ
νμ μν μ ν λ²λ€μ΄λ€.
μ΄λ°μμΌλ‘ μ΄λ€ μ νμ λ¬ΆμμΌλ‘ ν맀νλ κ²μ 'λ²λ€λ§'νλ€κ³ νλ€.
κ·ΈλΌ μΉ κ°λ°μ ν λ 'λ²λ€λ§'μ νλ€κ³ νλ©΄ λ¬΄μ¨ μλ―ΈμΌκΉ?
(μ°Έκ³ λ‘ μΉ κ°λ°μμ λ²λ€λ§ = λΉλ λΌκ³ ν μ μλ€.)
μ¬μ©μμκ² μΉ μ ν리μΌμ΄μ
μ μ 곡νκΈ° μν΄ μ¬λ¬ μ½λμ νλ‘κ·Έλ¨λ€μ λ¬Άλ νμλ‘ μ μν μ μλ€.
κ°λ°μλ μ΅μ’
μ μΌλ‘ λ²λ€λ§λ μΉ μ ν리μΌμ΄μ
μ λ§λ€μ΄λ΄κ³ , μ¬μ©μκ° μΉ μ ν리μΌμ΄μ
μ μ΄μ©ν λλ λ²λ€λ§ν νμΌμ λ°μμ λΈλΌμ°μ κ° μ΄ λ²λ€μ μ€ννλ€.
π§ κ·Έλ₯ html, css, javascriptλ‘ μΉ μ ν리μΌμ΄μ μ λ§λ€ μλ μμ§λ§ κ΅³μ΄ λ²λ€λ§μ νλ μ΄μ κ° λκΉ?
μ½λλ₯Ό 'λ²λ€λ§'νλ€λ κ²μ λ¨μν λ¬ΆκΈ°λ§ νλ κ²μ΄ μλλΌ μ»΄ν¨ν° νμΌμ 'μμΆ'νλ κ°λ
κ³Ό λΉμ·νλ€.
λ²λ€ νμΌμ λ²λ€λ§μ κ±°μΉμ§ μμ μλ³Έ νλ‘κ·Έλ¨ νμΌλ³΄λ€ ν¬κΈ°κ° μμμ§κ³ μ€ν μλ, λ‘λ© μλ λν λΉ¨λΌμ§λ€. λ²λ€λ§μ νλ κ²μ μ±λ₯ μΈ‘λ©΄μμ 무쑰건 μ΄λμ΄λ€!
μμΆν νμΌμ λ°μμ μμΆν΄μ μ κΉμ§λ νμΌμ μ‘°μν μ μλ κ²μ²λΌ, λ²λ€λ§λ μΉ μ ν리μΌμ΄μ λ μ¬μ©μκ° μμλ‘ μ‘°μν μ μλ€. λ²λ€λ§λμ§ μμ μλ³Έ μ½λμ μ¬μ©μκ° μ κ·Όν μ μλ€λ©΄, μ»΄ν¨ν°λ₯Ό μ μλ μ¬μ©μκ° μ΄λ₯Ό μνλ λλ‘ μ‘°μν μνμ΄ μκΈ΄λ€. (ex. κ°μ μλ£κ³ λ€μ κ²μ²λΌ λ§λ€κΈ° λΌλκ°..)
Javascriptμμ λ³μλ κΈ°λ³Έμ μΌλ‘ 'μ μ λ²μ'λ₯Ό κ°μ§κΈ° λλ¬Έμ νλμ νλ‘μ νΈ ν΄λμμ μ¬λ¬ κ°μ .js νμΌμ΄ μλλΌλ μλ‘ λ³μλ₯Ό 곡μ νκ² λλ€.
κ·Όλ° μ¬κΈ°μ λ³μλ₯Ό μ€λ³΅ μ μΈνκ±°λ μλμΉ μμ κ°μ ν λΉν΄ μκΈ°λ μλ¬λ₯Ό λ²λ€λ§ λκ΅¬μΈ Webpackμμλ λͺ¨λ λ²λ€λ§μΌλ‘ ν΄κ²°νλ€.
2022λ
νμ¬ νλ‘ νΈμλ μ ν리μΌμ΄μ
λ°°ν¬λ₯Ό μν΄ κ°μ₯ λ§μ΄ μ¬μ©νλ λ²λ€λ§ λꡬ, λ²λ€λ¬μ΄λ€.
webpackμ 'javascript μ ν리μΌμ΄μ
μ μν λͺ¨λ λ²λ€λ¬'μ΄λ€.
βοΈ module bundler
HTML, CSS, Javascript λ±μ μμμ κ°κ°μ λͺ¨λλ‘ λ³΄κ³ μ΄λ₯Ό μ‘°ν©ν΄ νλμ λ¬ΆμμΌλ‘ λ²λ€λ§(λΉλ)νλ λꡬ
(μ¬κΈ°μ λͺ¨λμ μ½λλΏλ§ μλλΌ μ ν리μΌμ΄μ μ νμν μ΄λ―Έμ§ νμΌκ³Ό κΈ°ν νμΌλ λͺ¨λ ν¬ν¨νλ€.)
λͺ¨λ μΉμΌλ‘ λ°μ νλ©΄μ html, css νμΌμ λ΄μ©μ΄ javascript νμΌ μμΌλ‘ λ€μ΄μλ€.
β κ·Έλμ .js νμΌμ μμ΄ μ λμ μΌλ‘ μ¦κ°νκ³ ,
β μΈλΆνλ λͺ¨λ νμΌμ΄ νλ°μ μΌλ‘ μ¦κ°ν΄
β μΉ μ ν리μΌμ΄μ
μ μμ‘΄μ± νΈλ¦¬λ λκ·λͺ¨κ° λμλ€.
μ΄λ κ² λλ©΄ μμμ λ§νλ javascriptμ λ³μ μ€μ½ν λ¬Έμ + μΉ μ ν리μΌμ΄μ
μ μ€νν λ λ€νΈμν¬ μͺ½μ λΉμ© λ¬Έμ κΉμ§ μ κ²½μ°κ² λμλ€.
λͺ¨λ λ²λ€λ¬λ
: νλμ μμμ (ex. react appμ index.js)λ‘λΆν° μμ‘΄μ±μ κ°μ§λ λͺ¨λμ λͺ¨λ μΆμ ν΄ dependency graphλ₯Ό λ§λ€κ³ , νλμ κ²°κ³Όλ¬Όμ λ§λ€μ΄ λ΄λ λ°©μμΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νλ€.
κ° μμμ μΌμΌμ΄ μλ²μ μμ²ν΄ μ»μ΄μ¬ νμκ° μλ€
β λμ κ°μ νμ
μ μμμ μμ²ν΄ μμ²κ³Ό μλ΅μ μ£Όκ³ λ°λλ€
loaderλ₯Ό μ¬μ©ν΄μ javascript ES6 λ¬Έλ²μ ES5λ‘ λ³νν΄μ£Όλ babel-loaderλ₯Ό μ΄μ©ν μ μλ€.
production λͺ¨λμμλ μ½λ λλ ν, μμΆ, μ΅μ ν μμ λ±μ μ§μν΄μ€λ€.
webpackμΌλ‘ λ²λ€λ§μ ν λ, webpack.config.jsλΌλ μ€μ νμΌμ μ§μ μμ±ν΄μ λ΄ μ
λ§μ λ§κ² λ²λ€λ§μ΄ κ°λ₯νλ€. (config νμΌμ΄ νμλ‘ μꡬλμ§λ μλλ€.)
config νμΌ μμμ target, entry, output, module, plugins, loader, mode
λ±λ±μ μ€μ ν΄μ€ μ μλ€.
webpackμ΄ μμ‘΄μ± κ·Έλνλ₯Ό 그리기 μμνλ μμμ μ΄ λλ νμΌμ μ§μ νλ€.
default κ°μΌλ‘λ ./src/index.js
μ μ¬μ©νλ€.
module.exports = {
name: 'webpack-setting',
entry: './src/index.js',
};
μμ±ν λ²λ€μ λ΄λ³΄λΌ μμΉμ λ²λ€ νμΌμ μ΄λ¦μ μ§μ νλ€.
default κ°μΌλ‘λ ./dist/main.js
λ₯Ό μ¬μ©νλ€.
const path = require('path');
module.exports = {
...
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
}
};
webpackμ κΈ°λ³Έμ μΌλ‘ javascriptμ JSON νμΌλ§ μ΄ν΄νλ€. λ€λ₯Έ μ νμ νμΌμ μ²λ¦¬νλ €λ©΄ loaderλ₯Ό μ¬μ©ν΄μΌ νλ€.
loaderλ νμΌλ€μ μ ν¨ν λͺ¨λλ‘ λ³νν΄ μ ν리μΌμ΄μ
μ μ¬μ©νκ±°λ, μμ‘΄μ± κ·Έλνμ μΆκ°νλ€.
module.exports = {
...
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtraPlugin.loader, "css-loader"],
exclude: /node_modules/,
},
]
}
};
moduleμ rules λ°°μ΄μ νλͺ©μ μΆκ°ν¨μΌλ‘μ¨ μ¬μ©ν μ μλ€. μμλ css νμΌμ μ¬μ©νκΈ° μν΄ css loaderλ₯Ό λΆλ¬μλ€.
loaderκ° νΉμ λͺ¨λλ€μ λ³ννλλ° μ°μλ€λ©΄, pluginμ λ λμ λ²μμ μμ μ μννλ€. λ²λ€μ μ΅μ ννκ±°λ μμ μ κ΄λ¦¬νκ³ , νκ²½λ³μ μ£Όμ λ±μ μμ μ ν΄μ€λ€.
μ¬μ©λ°©λ²μ
1. require ꡬ문μ ν΅ν΄ pluginμ λΆλ¬μ€κ³ ,
2. plugins λ°°μ΄μ μΆκ°νκ³ ,
3. μ΄ λ λ€λ₯Έ λͺ©μ μΌλ‘λ μ¬λ¬λ² μ¬μ©ν μ μλλ‘ new ν€μλλ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μ£Όμ΄μΌνλ€!
const webpack = require('webpack');
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
...
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "src", "index.html"),
}),
new MiniCssExtractPlugin(),
],
};
modeμλ development
, production
, none
μΈκ°μ§ μ΅μ
μ΄ μλ€. defaultλ production
μ΄λ€.
module.exports = {
mode: 'production',
...
};
μ°Έκ³ : https://webpack.js.org/concepts/