μΉν© νν 리μΌμ μμ±ν©λλ€. μ²μμ μΉν©μ μ²μ μ νμ λ μ΄λ €μ λ λΆλΆλ€μ νλμ© μ²΄ν¬ν΄λ³΄λ©° κ°λ λ€μ μ§κ³ λμ΄κ°λλ€. μ΄ μ μ₯μλ 보μΌλ¬νλ μ΄νΈλ‘ μ΄μ©ν μ μμ΅λλ€. :)
κ°λ³κ² μΉν©μ€μ μ νλ©° μΉν©μ μ£Όμ κ°λ μ μμλ³΄κ³ λΉλμ κ°λ°μλ²κΉμ§ μ€μ νλ λ°©λ²μ μ΅νλκ²μ λͺ©νλ‘ ν©λλ€. μΆκ°μ μΌλ‘ ES6 μ΄μμ λ¬Έλ²λ€μ ES5λ‘ λ³ννμ¬ μλμ΄ μ μμ μΌλ‘ λλμ§ νμΈν΄λ΄ λλ€.
- 1λ¨κ³ : νλ‘μ νΈ μ΄κΈ°ν
- 2λ¨κ³ : νμν λͺ¨λλ€ μ€μΉνκΈ°
- 3λ¨κ³ : μΉν© μ€μ νμΌ μμ±νκΈ°
- λΉλν΄λ³΄κΈ°
- κ°λ°μλ² μ΄μ΄λ³΄κΈ°
μΉν©μ΄λ 무μμΈμ§ μμλ³΄κ³ μΉν©μ 4κ°μ§ μ£Όμκ°λ λ€μ μμλ΄ λλ€.
μΉν©μ΄λ λͺ¨λ λ²λ€λ¬μ
λλ€.
λͺ¨λ(Module) μ΄λ ꡬν μΈλΆμ¬νμ μΊ‘μννκ³ κ³΅κ° APIλ₯Ό λ
ΈμΆνμ¬ λ€λ₯Έ μ½λμμ μ½κ² λ‘λνκ³ μ¬μ©ν μ μλλ‘ μ¬μ¬μ© κ°λ₯ν μ½λμ‘°κ°μ
λλ€.
λ²λ€(Bundle) μ΄λ μννΈμ¨μ΄ λ° μΌλΆ νλμ¨μ΄μ ν¨κ» μλνλλ° νμν λͺ¨λ κ²μ ν¬ν¨νλ ν¨ν€μ§ μ
λλ€.
λͺ¨λλ²λ€λ¬ λ μ°λ¦¬κ° λ§λ€λ €λ 'νλ‘μ νΈ'μ νμν λͺ¨λ μ½λμ‘°κ°(λͺ¨λ)λ€μ ν¬ν¨μμΌμ£Όλ λꡬμ λλ€.
μΉν© μ νλ‘μ νΈμ νμν λͺ¨λ μμ‘΄μ±νμΌλ€μ νλμ λ²λ€νμΌλ‘ λ§λ€μ΄ μ£Όμ΄ λ°°ν¬νκΈ° μ½κ² λΉλν΄μ£Όλ λꡬμ λλ€.
λͺ¨λλ²λ€λ¬μ λν μμΈν κΈμ μλ°μ€ν¬λ¦½νΈ λͺ¨λ, λͺ¨λ ν¬λ§·, λͺ¨λ λ‘λμ λͺ¨λ λ²λ€λ¬μ λν 10λΆ μ λ¬Έμ λ₯Ό μ½μ΄λ³΄μκΈ° λ°λλλ€.
μΉν©μμ λΉλλ₯Ό ν λ μ£Όμκ°λ μ΄ ν¬κ² 4κ°μ§κ° μ‘΄μ¬ν©λλ€. κ°κ°μ λ¨κ³μ μΌλ‘ μμλ³΄κ³ λ€μ μ€ν μμ μ€μ λ‘ μ€μ μ ν΄λ³΄κ² μ΅λλ€.
- entry
- module
- plugins
- output
νλ‘μ νΈκ° ꡬλλκΈ° μν΄μλ λ€μν μμ‘΄μ±νμΌ(λͺ¨λ)λ€(js, html, css, img λ±)μ΄ μ‘΄μ¬νλλ° μ΄λ₯Ό ν΅ν΄ μμ‘΄μ±κ·Έλνκ° μκΈ°κΈ° λ§λ ¨μ
λλ€. μμ‘΄μ± κ·Έλνμ μμμ μ΄ λλ λΆλΆμ΄ entry μ΄λ©° λ³΄ν΅ main.js
λλ index.js
λΌκ³ μ€μ ν©λλ€.
λ€μν λͺ¨λλ€μ κ°κ°μ νμΌμ νμ κ°κ²λ©λλ€. μ΄ λ¨κ³μμλ κ° λͺ¨λλ€μ λͺ¨λμ νμ λ°λΌ μ΄λ»κ² μ²λ¦¬ν μ§λ₯Ό μ€μ ν΄μ€λλ€. μ νλ€μ λ‘λ λΌλκ²μ ν΅ν΄ μ²λ¦¬λμ΄ μ΅μ’ μ μΌλ‘ js νμΌλ‘ λ§λ€μ΄μ§λλ€.
2λ¨κ³μ κ³Όμ μ κ±°μΉκ²λλ©΄ js νμΌμ΄ λμ€κ²λ©λλ€. ν΄λΉ js νμΌμ κ·Έλλ‘ μΈ μλ μμ§λ§ μ΅μν(minify), λλ ν(uglify) κ°μ κΈ°λ₯λ€μ μ΄μ©ν μ μλ μ¬μ λ ¨λ¨κ³λΌκ³ λ³Ό μ μμ΅λλ€.
3λ¨κ³κΉμ§ λλκ²λλ©΄ μ΄λ¦ κ·Έλλ‘ μΆλ ₯μ λλ€. μ΅μ’ μ μΌλ‘ λ²λ€λ§λμ΄ λμ¬ νμΌμ λν νμΌμ΄λ¦, κ²½λ‘κ°μ κ²λ€μ μ§μ ν΄ μ€ μ μμ΅λλ€.
μΉν©μ΄ 무μμΈμ§, μ΄λ€ 컨μ μ μ‘κ³ μλμ§μ λν΄ μ΄ν΄λ΄€μ΅λλ€. μ΄ λ¨κ³μμλ μ€μ λ‘ μ΄λ»κ² μΉν©μ ꡬμ±νλμ§μ λν΄ μ€μ΅μ ν©λλ€.
- λ§μκ°μ§
- npm
λ¨Όμ νλ‘μ νΈκ° λ ν΄λλ₯Ό λ§λ€κ³ μ΄κΈ°ν μμΌμ€λλ€.
$mkdir my-project
$cd my-project
$npm init
$npm init
μ μ
λ ₯νμμΌλ©΄ λ€μκ³Ό κ°μ νλ©΄μ λ³Ό μ μμ΅λλ€.
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (webpack-tutorial)
version: (1.0.0)
description: webpack-tutorial
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
λ κ³μ μν° μΉμ λ μκ΄ μμ΅λλ€λ§ μ€μνκ±° λͺ κ°λ§ μ§κ³ λμ΄κ°μλ©΄
- package name : ν¨ν€μ§ μ΄λ¦
- version : ν¨ν€μ§ λ²μ Ό
- description : μ€λͺ
- entry point: μμμ
μ¬κΈ°κΉμ§ μ€μ
¨μΌλ©΄ package.json
μ΄λΌλ νμΌμ΄ νλ‘μ νΈ ν΄λμ μμ±μ΄ λλκ²μ λ³Ό μ μμ΅λλ€.
package.json μ΄λ?
κ°λ¨ν μ°λ¦¬κ° λ§λ€ ν¨ν€μ§(νλ‘μ νΈ λλ μ±)μ λν μ€λͺ μμ κ°μ νμΌμ λλ€. μμΈν λ΄μ©μ λ€μ κΈμ ν΅ν΄ μ μ μμ΅λλ€.
μ°λ¦¬μ νλ‘μ νΈμ λͺ©νλ κ°λ¨ν©λλ€.
- λΉλνκΈ°
- κ°λ° μλ² μ΄μ΄λ³΄κΈ°
- ES6 λ₯Ό ES5λ‘ λ³ννκΈ°
κ·ΈλΌ νμν κ° λͺ¨λλ€μ μ€μΉν©λλ€.
$npm install -g webpack
$npm install --save-dev webpack@3.11.0 webpack-dev-server@2.11.0
$npm install --save-dev @babel/core @babel/preset-env babel-loader
$npm install --save-dev html-webpack-plugin
λͺ¨λ λ€μ @μ«μ λ ν΄λΉ λͺ¨λμ νΉμ λ²μ Όμ λνλ λλ€. webpackμ 3.11.0λ²μ Ό, webpack-dev-serverμ 2.11.0 λ²μ Όμ μ€μΉν©λλ€.
@babel/core μ @babel/preset-env μ λΆμ @babel μ babel 7λ²μ ΌλΆν° μκΈ΄ λ€μμ€νμ΄μ€μ λλ€.
μ κΉ λͺ λ Ήμ΄λ€μ μ§κ³ λμ΄κ°κ² μ΅λλ€.
# μ§μμ€μΉ & λ°°ν¬μ€μΉ
$npm install <package name>
# μ μμ€μΉ
$npm install -g <package name>
# κ°λ°μ€μΉ
$npm install --save-dev <package name>
κ°λ°μμλ§ νμν λͺ¨λλ€μ --save-dev
μ΅μ
μ ν΅ν΄ μ€μΉν©λλ€. μ΄λ κ² μ΅μ
μ λΆμ¬μ μ€μΉν κ²½μ°μλ package.json
νμΌμ devDependencies
μ λͺ©λ‘μ μΆκ°λ©λλ€.
λ°°ν¬μμ νμν λͺ¨λλ€μ --save
μ΅μ
μ ν΅ν΄ μ€μΉλλλ° μλ΅ν μ μμ΅λλ€. package.json
νμΌμ dependencies
μ λͺ©λ‘μ μΆκ°λ©λλ€.
μ§μ(local)μ€μΉμ μ μ(global)μ€μΉκ° μμ΅λλ€. μ΅μ
μ λ³λλ‘ μ§μ νμ§μμΌλ©΄ κΈ°λ³Έκ°μ μ§μμ€μΉλ‘ λ©λλ€. κ·Έλ¦¬κ³ μ€μΉλ λͺ¨λλ€μ ν΄λΉ νλ‘μ νΈ λ΄μ node_modules
λΌλ λλ ν 리μ μ€μΉλ©λλ€. μ§μμ€μΉλ ν΄λΉ νλ‘μ νΈ λ΄μμλ§ μ¬μ©ν μ μλ€λ νΉμ§μ΄ μμ΅λλ€.
μ μμ€μΉλ $npm install
λͺ
λ Ήμ΄ λ€μ -g
λΌλ μ΅μ
μ λΆμ¬μ€λλ€. μ μμΌλ‘ μ€μΉλ κ²½μ° λͺ¨λ νλ‘μ νΈμμ μ¬μ©ν μ μμ΅λλ€. μ μμΌλ‘ μ€μΉλ λͺ¨λλ€μ κ° OS λ§λ€ λ€λ¦
λλ€.
- webpack : λͺ¨λλ²λ€λ¬
- webpack-dev-server : κ°λ° μ μ€μκ° λΉλλ₯Ό ν΄μ€λλ€.
- @babel/core : λ°λ²¨μ ν΅μ¬ νμΌ
- @babel/preset-env : ES6 μ΄μμ μλ°μ€ν¬λ¦½νΈ νμΌμ κ° λΈλΌμ°μ μ λ§λ μ½λλ‘ λ³νμμΌμ£Όλ λͺ¨λ
- babel-loader : μλ°μ€ν¬λ¦½νΈ νμΌμ μΉν©μμ λ²λ€λ§νκΈ°μν΄ μ¬μ©νλ λ‘λ
- html-webpack-plugin : λ²λ€λ νμΌλ€μ script νκ·Έλ₯Ό ν΅ν΄ μΆκ°ν΄μ€μΌ νλλ° μ΄λ₯Ό μλμ μΌλ‘ ν΄μ€λλ€.
μ΄μ λͺ¨λλ€μ μ€μΉνμΌλ©΄ λ€μ package.json
νμΌμ μ΄ν΄λ΄
λλ€.
"devDependencies": {
"@babel/core": "^7.2.2",
"@babel/preset-env": "^7.2.3",
"babel-loader": "^8.0.4",
"webpack": "^3.11.0",
"webpack-dev-server": "^2.11.0"
}
devDependencies
μ μΆκ°λ λͺ©λ‘λ€μ΄ λμ€λκ²μ νμΈν μ μμ΅λλ€.
λ€λ₯Έ νλ‘μ νΈλ€μ΄ μ΄λ»κ² ꡬμ±λμ΄μλ νμΈνλ €λ©΄ κ°μ₯λ¨Όμ
package.json
νμΌμ μ΄ν΄λ³΄λ κ²μ΄ μ’μ΅λλ€ :)
μ΄μ μ€μ νμΌμ μμ±ν΄λ΄
λλ€. λ¨Όμ λ£¨νΈ λλ ν 리μ webpack.config.js
νμΌμ μμ±ν©λλ€.
μ΄ νμΌμ μΉν©μ μ€μ μ΄ λ€μ΄μλ νμΌμ
λλ€. μ΄ μ€μ μ ν΅ν΄ μ΄λ»κ² λΉλν κ²μΈμ§μ λν΄ μ»€μ€ν°λ§μ΄μ§ ν μ μμ΅λλ€.
μΉν©μ 4κ°μ§ κ°λ μ λ μ¬λ¦¬λ©΄ λλ΅ λ€μκ³Ό κ°μ ννμ λλ€. plugins λ λ°°μ΄ννλ‘ μμ±νλ€λκ²μ μ£ΌμνμΈμ!
// webpack.config.js
module.exports = {
entry: {
},
output: {
},
module: {
},
plugins: [
],
};
λ¨κ³λ³λ‘ λ€μ μ μ©ν΄λ³΄κΈ° μ μ ν΄λꡬ쑰λ₯Ό νλ² μ§κ³ λμ΄κ°κ² μ΅λλ€.
my-project
βββ node_modules/
βββ src/
β βββ index.js
βββ package.json
βββ package-lock.json
βββ webpack.config.js
// webpack.config.js
module.exports = {
entry: {
bundle: './src/index.js',
}
// ...
};
μμ‘΄μ± κ·Έλνμ μμμ μ΄ λλ index.js μ κ²½λ‘λ₯Ό μ‘μμ€λλ€. bundle μ΄λΌλ keyλ‘ μ§μ ν μ΄μ λ λ²λ€νμΌμ΄ μ¬λ¬κ° μμ κ²½μ° μ΄λ κ² key: value
ννλ‘ μμ±ν©λλ€. μμ μ½λλ μλ μ½λμ λμΌν©λλ€.
// webpack.config.js
module.exports = {
entry: './src/index.js',
// ...
};
output μ μΆλ ₯μ΄ λ κ²½λ‘μ νμΌ μ΄λ¦μ μ§μ ν΄μ€λλ€.
// webpack.config.js
const path = require('path');
module.exports = {
entry: {
bundle: './src/index.js',
},
output: {
filename: '[name].js',
path: path.join(__dirname, 'dist'),
},
// ...
};
λ¨Όμ filename
μμ±μλ μΆλ ₯ν νμΌμ μ΄λ¦μ μ€μ ν©λλ€. μ¬λ¬κ°μ λ²λ€νμΌμ΄ νμν κ²½μ° [name].js
λ‘ μμ±μ νλ©΄ κ° λ²λ€νμΌμ μ΄λ¦μ λ§κ² μΆλ ₯λ©λλ€.
path
μλ λ²λ€λ§ λ μΆλ ₯νμΌμ΄ μμΉν κ²½λ‘λ₯Ό μ ν΄μ€λλ€. nodejs
μ λ΄μ₯λͺ¨λμΈ path
λ₯Ό μ½μ΄λ€μ¬ μ¬μ©ν©λλ€.
path.resolve
μpath.join
λΌλ λ©μλλ μ°¨μ΄κ° μμ΅λλ€ νμ§λ§__dirname
μ μ¬μ©νλ©΄ μλνλ κ°μ λ°νν μ μμ΅λλ€. - Jbee λμ κΈμ€ μΌλΆ μΈμ©
__dirname
μ΄λ?
κ°λ¨ν λ§ν΄ νμ¬ μμΉλ₯Ό κ°λ¦¬ν€λ nodejs μ μ μλ³μ. μμΈνλ΄μ©μ λ€μ κΈμ μ°Έκ³ νμΈμ
// webpack.config.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: '[name].js',
path: path.join(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: '/node_modules/',
include: path.join(__dirname, 'src'),
},
],
},
// ...
};
module μμλ rules λΌλ μμ±μΌλ‘ νλ² λ λ€μ΄κ°λλ€. rules λ κ°μ²΄λ°°μ΄ννμμ μ£ΌμνμΈμ!
κ·μΉλ€(rules)μ κ°μ²΄ννλ‘ μ‘΄μ¬νλλ° λ΄λΆλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
- test: λ‘λλ₯Ό μ μ©μν¬ νμΌλ€μ λν΄ μ κ·μμΌλ‘ νν.
.js
νμΌλ€μ λ€μ λ‘λ μ¬μ© - loader: λ‘λ λͺ
μ.
.js
νμΌμbabel-loader
λ₯Ό νκ³ νΈλμ€νμΌλ©λλ€. - exclude: λ‘λκ° μ€νλ λ μ μΈμν¬ νμΌλ€μ λͺ
μ,
/node_modules/
μ μ‘΄μ¬νλ λͺ¨λ νμΌ μ μΈ - include: λ‘λκ° μ€νλ λ ν¬ν¨μν¬ νμΌλ€μ λͺ
μ, 'src' ν΄λμ μλ λͺ¨λ
.js
νμΌ ν¬ν¨
λ°λ²¨μ μ¬μ©ν λ νκ°μ§ λ ν΄μ€μΌνλ μμ
μ΄μλ€. ES6 μ΄μμ μλ°μ€ν¬λ¦½νΈ νμΌμ ES5 ννλ‘ λ°κΏμ£Όλ μ€μ μΈλ°, 루νΈλλ ν 리μ .babelrc
λΌλ νμΌμ λ§λ€κ³ λ€μκ³Ό κ°μ΄ μμ±ν©λλ€.
{
"presets": ["@babel/preset-env"]
}
νλ¬κ·ΈμΈμ μ¬λ¬κ°μ§λ₯Ό μ¬μ©ν μ μμ§λ§ μ¬κΈ°μλ html-webpack-plugin μ μ΄μ©ν©λλ€.
μ΄μ©νκΈ° μ μ 루νΈλλ ν 리μ index.html
μ μμ±ν΄ μμ±νμ. ν΄λΉ νμΌμ body
νκ·Έκ° λ«νλ λΆλΆ λ€μ bundle.js
λ₯Ό import νμ§ μλλ€λκ²μ μ£Όμλ₯Ό κΈ°μΈμ¬μ€λλ€.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Webpack Tutorial</title>
</head>
<body>
Hello Webpack!
</body>
</html>
μ΄μ html-webpack-plugin μ ν΅ν΄ bundle.js
λ₯Ό λΉλμμ μλ import λκ² ν΄λ΄
λλ€.
// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: '[name].js',
path: path.join(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: '/node_modules/',
include: path.join(__dirname, 'src'),
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: path.join(__dirname, 'index.html'),
filename: 'index.html',
inject: true,
}),
],
};
html-webpack-plugin
μ κ°μ Έμ HtmlWebpackPlugin
μ λ΄κ³ plugins λ°°μ΄ μμμ new λ₯Ό ν΄μ€λ€. λ΄λΆλ₯Ό μ΄ν΄λ³΄μλ©΄
- template: κΈ°μ‘΄μ μμ±ν html νμΌμ΄ μλ€λ©΄ λΆλ¬μ΅λλ€.
- filename: μ΅μ’
μ μΌλ‘ μμ±λ html νμΌ μ΄λ¦μ
λλ€. κΈ°λ³Έκ°μ
index.html
μ λλ€. - inject: true λ‘ νλ©΄ μλμ μΌλ‘
bundle.js
λ₯Ό import ν΄μ€λλ€.
μ€μ μ λ€νμΌλ λΉλλ₯΄ ν΄λ³΄λ λ¨κ³μ λλ€. λΉλνκΈ°μ ν΄λꡬ쑰λ₯Ό νμΈν΄λ΄ λλ€.
my-project
βββ node_modules/
βββ src/
β βββ index.js
βββ index.html
βββ .babelrc
βββ package.json
βββ package-lock.json
βββ webpack.config.js
μ΄λ κ² λμ΄μλ€λ©΄ ν΄λΉ νλ‘μ νΈμ 루νΈλλ ν λ¦¬λ‘ μ΄λνμ¬ λͺ λ Ήμ΄λ₯Ό μ λ ₯ν©λλ€.
$webpack --config webpack.config.js
μ±κ³΅νλ€λ©΄ built
λΌλ λ©μΈμ§μ ν¨κ» dist
λΌλ ν΄λκ° μμ±λκ³ κ·Έ μμλ bundle.js
κ° μμ±λμμμ νμΈν©λλ€.
λͺ
λ Ήμ΄λ₯Ό μ
λ ₯νκΈ° λ무 κΈ΄ κ² κ°μ΅λλ€. package.json
μ scripts
λ₯Ό μ½κ°λ§ μμ νμ¬ νΈλ¦¬νκ² μ΄μ©ν μ μμ΅λλ€. λ€μμ μΆκ°ν΄μ£ΌμΈμ.
"scripts": {
"build": "webpack --config webpack.config.js"
},
κ·Έλ¦¬κ³ λΉλν©λλ€.
$npm run build
# npm run build λ λ€μκ³Ό κ°μ΄ μΉνλ©λλ€.
$webpack --config webpack.config.js
λΉλκ° μλ£λλ©΄ dist
ν΄λμ bundle.js
μ index.html
μ΄ λΉλλ κ²μ νμΈν μ μμ΅λλ€. src/index.js
μ ES6 λ¬Έλ²μ μμ±νκ³ λ²λ€λ§λ νμΌκ³Ό λΉκ΅ν΄λ΄
λλ€.
// src/index.js
class Person {
constructor() {
console.log('hello!');
}
}
new Person();
bundle.js μ 맨 μλλ§ μ£Όλͺ©ν΄λ³΄λ©΄ .js
νμΌμ΄ babel-loader
λ₯Ό ν΅ν΄ λ€μκ³Ό κ°μ΄ νΈλμ€νμΌ λμμμ νμΈν μ μμ΅λλ€.
// dist/bundle.js
// ... μλ΅
(function(module, exports) {
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Person = function Person() {
_classCallCheck(this, Person);
console.log('hello!');
};
new Person();
λΉλλ₯Ό λ§μ³€μ΅λλ€. νμ§λ§ κ°λ° ν λ μμ€μ½λ μμ μ ν λλ§λ€ λΉλλ₯Ό νμ¬ νμΈν μλ μλ λ Έλ¦μ λλ€. κ·Έλμ λ΄λΆ κ°λ°μλ²λ₯Ό μ΄κ³ μμ€μ½λμ λ³κ²½μ¬νμ λ³κ²½ μ μλμΌλ‘ μ»΄νμΌνμ¬ μ¬λ €μ£Όλ webpack-dev-server λ₯Ό μ΄μ©ν©λλ€.
μ°λ¦¬λ λͺ¨λμ μ€μΉνμΌλ―λ‘ λͺ λ Ήμ΄λ§ μ λ ₯νλ©΄ λ©λλ€.
$node_modules/.bin/webpack-dev-server --inline --hot
κ·Έλ¬λ©΄ λΈλΌμ°μ λ₯Ό μ΄κ³ localhost:8080 λ₯Ό μ λ ₯νλ©΄ Hello Webpack κ³Ό ν¨κ» μ½μμ°½μλ hello κ° μ°νμλκ²μ νμΈν μ μμ΅λλ€.
μμ λͺ
λ Ήμ΄λ μ€μΌ μ μμ΅λλ€.
package.json
νμΌμ μ΄κ³ scripts
μμ λ€μμ μΆκ°ν΄μ€λλ€.
"scripts": {
"build": "webpack --config webpack.config.js",
"start": "webpack-dev-server --hot --inline"
},
μ΄μ λ νΈνκ² μ΄μ©ν μ μμ΅λλ€.
$npm run start
#npm run start λ λ€μκ³Ό κ°μ΄ μΉνλ©λλ€.
$node_modules/.bin/webpack-dev-server --inline --hot
webpack-dev-server λ₯Ό μ΄μ©ν λ μ΅μ
μ μ€ μ μλλ°
inline μ΅μ
μ μ 체 νμ΄μ§ μ€μκ° λ‘λ©μ΄λ©°,
hot μ΅μ
μ νμΌμ΄ μμ λ κ²½μ° κ·Έ λΆλΆμ λν΄ λ¦¬λ‘λλ₯Ό ν΄μ£Όλ μ΅μ
λ μμΈν μ¬νμ 곡μλ¬Έμ μ°Έκ³
λͺ©νμ νμν κ°λ¨ν μ€μ λ€μ λμ΄λ¬μ΅λλ€. μΉν©μ 컀μ€ν°λ§μ΄μ§ νλ λ°©λ²μ μ λ§λ°λΌ λ€λ₯΄κ³ λ€μν©λλ€. μ μ¬μ μμ λ§κ² μ€μ νλκ²μ΄ κ°μ₯ μ’μ μ€μ μ΄ μλκΉ μΆμ΅λλ€. ν΄λΉ μ μ₯μλ₯Ό boilerplate μ²λΌ μ¬μ©ν΄λ λκ³ playground λ‘ μ¬μ©νμ λ λ©λλ€. κ°μΈμ μΌλ‘ μ΄ κΈμ μμ±νλ©° μΉν©μ λν΄ μ’ λ μ λ¦¬κ° λμ΄μ μ»μ΄κ°λκ² λ§μ΅λλ€. μλͺ»λ μ¬νμ΄ μλ€λ©΄ ν리ν λΆνλλ¦¬κ² μ΅λλ€.