μ΄λ² μ±ν°λ μΉν©μ λν΄ λ€λ£¨μμ΅λλ€.
β οΈ μ 리ν λ΄μ©μ μ€νλ μλͺ»λ μ λ³΄κ° μμ μ μμ΅λλ€. λκΈλ‘ μλ €μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ
μ μν μ μ λͺ¨λ λ²λ€λ¬μ΄λ€. webpackμ΄ μ ν리μΌμ΄μ
μ μ²λ¦¬ν λ, λ΄λΆμ μΌλ‘λ νλ‘μ νΈμ νμν λͺ¨λ λͺ¨λμ 맀ννκ³ νλ μ΄μμ λ²λ€μ μμ±νλ λνλμ κ·Έλνλ₯Ό λ§λ λ€. webpack.config.js
μ μ μνλ©΄ node.jsμ κ°μ Έμ€κΈ°, λ΄λ³΄λ΄κΈ°λ₯Ό μ΄μ©νλ€.
1. νμΌ λ¨μμ μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ΄λ¦¬μ νμμ±
μλμ κ°μ΄ λκ°μ νμΌμ΄ κ°μ λ³μλ‘ μ μΈλμ΄ μκ³ νλμ νμΌμμ λ μλ°μ€ν¬λ¦½νΈ νμΌμ λ‘λ©νλ€κ³ νλ€λ©΄ μ€λ³΅ μ μΈμ νκ² λμ΄ μ¬ν λΉλκΈ° λλ¬Έμ νμΌ λ¨μλ‘ λ³μλ₯Ό κ΄λ¦¬ν μ μλ€.
// app.js
var num = 10;
function getNum() {
console.log(num);
}
// main.js
var num = 20;
function getNum() {
console.log(num);
}
μ΄λ° λ¬Έμ μ μμ νμΌ λ¨μλ‘ λ³μλ₯Ό κ΄λ¦¬ν μ μλ μλ°μ€ν¬λ¦½νΈ λͺ¨λνμ λν΄ νμμ±μ λλΌκ² λμλ€.
2. μΉ κ°λ° μμ
μλν λꡬ
νλ‘ νΈμλ κ°λ°μ ν λ ν
μ€νΈ νΈμ§κΈ°μμ μ½λλ₯Ό μμ νκ³ μ μ₯ν λ€ λΈλΌμ°μ μμ μλ‘κ³ μΉ¨ν΄μΌλ§ λ°μλ κ²°κ³Όλ₯Ό νμΈν μ μμμ΅λλ€. μ΄λ¬ν μΌλ€μ μλνμ λν νμμ±μ λκΌμ΅λλ€.
3. μΉ μ ν리μΌμ΄μ
μ λΉ λ₯Έ λ‘λ© μλμ λμ μ±λ₯
μΉ μ¬μ΄νΈμ λ‘λ© μλλ₯Ό λμ΄κΈ° μν΄μ μλ²λ‘ μμ²νλ νμΌ μ«μλ₯Ό μ€μ΄λ λ±μ λ
Έλ ₯μ ν΄μμ΅λλ€. μΉν©μ κΈ°λ³Έμ μΌλ‘ νμν μμμ 미리 λ‘λ©νλκ² μλλΌ κ·Έ λ κ·Έ λ μμ²νμλ μ² νμ κ°κ³ μμ΅λλ€. Code splitting
κ°μ κΈ°λ₯μ μ΄μ©νμ¬ μνλ λͺ¨λμ μνλ νμ΄λ°μ λ‘λ©ν μ μμ΅λλ€.
μΉ μμμ λ³ννκΈ° μν΄ νμν μ΅μ΄ μ§μ μ μ΄μ μλ°μ€ν¬λ¦½νΈ νμΌ κ²½λ‘λ€.
// μΉν© μ€ν μ src/index.jsλ₯Ό λμμΌλ‘ μΉν©μ΄ λΉλλ₯Ό μνν΄λΌ.
module.exports = {
entry: './src/index.js'
}
μΉν©μ λλ¦¬κ³ λ κ²°κ³Όλ¬Όμ νμΌ κ²½λ‘λ₯Ό μλ―Ένλ€. κ°μ²΄ ννλ‘ μ΅μ λ€μ μΆκ°ν΄μ£Όμ΄μΌ νλ€.
// webpack.config.js
var path = require('path');
module.exports = {
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, './dist')
}
}
filename
: μΉν©μΌλ‘ λΉλν νμΌμ μ΄λ¦
path
: ν΄λΉ νμΌμ κ²½λ‘
path.resolve()
: μΈμλ‘ λμ΄μ¨ κ²½λ‘λ€μ μ‘°ν©νμ¬ μ ν¨ν νμΌ κ²½λ‘λ₯Ό λ§λ€μ΄μ£Όλ NodeJS API
μΉν©μ΄ μΉ μ ν리μΌμ΄μ μ ν΄μν λ μλ°μ€ν¬λ¦½νΈ νμΌμ΄ μλ μΉ μμ(HTML, CSS, Image λ±)λ€μ λ³νν μ μλλ‘ λμμ£Όλ μμ±μ΄λ€.
// css-loader μ μ© μμ
// webpack.config.js
module.exports = {
entry: './app.js',
output: {
filename: 'bundle.js'
},
module: {
rules: [
//ν΄λΉ νλ‘μ νΈμ CSS νμΌμ λν΄μ CSS λ‘λλ₯Ό μ μ©νκ² λ€λ μλ―Έ
{
test: /\.css$/,
use: ['css-loader']
}
]
}
}
test
: λ‘λλ₯Ό μ μ©ν νμΌ μ ν
use
: ν΄λΉ νμΌμ μ μ©ν λ‘λμ μ΄λ¦
λ‘λ μ μ© μμ
κΈ°λ³Έμ μΌλ‘ μ€λ₯Έμͺ½μμ μΌμͺ½ μμΌλ‘ μ λ ¬λλ€.
// sass-loader => css-loader => style-loader μμΌλ‘ μ λ ¬
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
μΉν©μ 기보μ μΈ λμμ μΆκ°μ μΈ κΈ°λ₯μ μ 곡νλ μμ±, λ‘λμ λ€λ₯΄κ² ν΄λΉ κ²°κ³Όλ¬Όμ ννλ₯Ό λ°κΎΈλ μν μ νλ€.
// webpack.config.js
var webpack = require('webpack');
module.exports = {
plugins: [
// μΉν©μΌλ‘ λΉλν κ²°κ³Όλ¬Όλ‘ HTML νμΌμ μμ±ν΄μ£Όλ νλ¬κ·ΈμΈ
new HtmlWebpackPlugin(),
]
}
npm, webpackμ λν΄μ λ°°μ°λ©΄μ νΌμ¦ μ‘°κ°μ΄ ν©μ΄μ Έ μλ κ²λ€μ΄ μ μ λ§μΆ°μ Έ κ°λ λλμ΄ λ€μλ€. μ΄λμ κ° λ€μ΄μ μ¬μ©νλ κ²λ€μ΄ μ λ§λ€μ΄μ‘κ³ μ΄λ€ λ°©λ²μΌλ‘ μ¬μ©νλ κ²μΈμ§ μλ‘κ² μκ²λμλ€. μΌλ§μ μ webpackμ μ¬μ©ν λ 곡λΆνμλ λ΄μ©λ³΄λ€λ μΈμΈν λΆλΆκΉμ§ μκ²λμ΄μ μλ‘μ λ€. μ΄λμ λ€λ€ μΉν© μΉν© νλꡬλ~γ γ γ γ γ
λ§€μΌ κ°μλ₯Ό λ°λ¦¬μ§ μκ³ λ€μμ§ 2μΌμ§Έ! λ°λΈμ½μ€ λλ λκΉμ§ λ°λ¦¬μ§ μκ³ κΎΈμ€ν νμ! ν μ λ 볡!μΌμ°π₯
νλ‘κ·Έλλ¨Έμ€ λ°λΈμ½μ€
μΉν© νΈλλΆ - μΉν©μ κ°μ₯ μ½κ³ λΉ λ₯΄κ² λ°°μ°λ λ°©λ²