
webpack은 자바스크립트(JS) 기반의 오픈소스 모듈 번들러이다. 모듈 번들러란, 웹 애플리케이션을 구성하는 자원(HTML, CSS, JS, 이미지 등)을 모두 각각의 모듈로 보고, 이들을 하나 또는 여러 개의 파일로 합쳐주는 도구를 의미한다.
webpack의 작업은 크게 네 가지 주요 구성 요소로 나눌 수 있다:
./src/index.js.Node.js가 설치된 환경에서, 아래 명령어를 통해 webpack을 설치한다.
npm install --save-dev webpack webpack-cli
webpack.config.jswebpack의 동작을 정의하는 설정 파일이다. 기본적인 구조는 아래와 같다:
const path = require('path');
module.exports = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
}
};
entry: 시작점을 정의한다.output: 출력 파일의 경로와 이름을 정의한다.설정 파일을 작성한 후, 아래 명령어로 webpack을 실행한다:
npx webpack --config webpack.config.js
이 명령은 webpack.config.js에 정의된 설정대로 webpack을 실행하여, 지정된 엔트리 파일부터 시작하여 필요한 모든 모듈을 하나의 파일로 번들링한다.
webpack은 기본적으로 JavaScript와 JSON 파일만 이해한다. 로더는 CSS, 이미지 파일, HTML 및 기타 비자바스크립트 파일을 webpack이 이해하고 활용할 수 있는 모듈로 변환하는 역할을 한다.
설치: 필요한 로더를 npm을 통해 설치한다. 예를 들어, CSS 파일을 로드하기 위해 style-loader와 css-loader를 설치한다.
npm install --save-dev style-loader css-loader
webpack.config.js 설정: 로더를 module 속성 아래 rules 배열에 추가한다.
module.exports = {
// ...
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
}
};
위의 설정은 .css 파일에 대해 css-loader를 사용하여 CSS 모듈을 로드하고, style-loader를 사용하여 스타일을 DOM에 주입한다.
플러그인은 webpack의 빌드 프로세스에 훅(hook)을 제공하여 번들 최적화, 자산 관리, 환경 변수 주입 등 다양한 작업을 수행한다.
설치: 필요한 플러그인을 npm을 통해 설치한다. 예를 들어, HTML 파일을 생성하는 html-webpack-plugin을 설치한다.
npm install --save-dev html-webpack-plugin
webpack.config.js 설정: 플러그인을 plugins 배열에 추가한다.
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
// ...
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
};
위의 설정은 HtmlWebpackPlugin을 사용하여 번들 결과를 포함하는 HTML 파일을 생성한다.
webpack은 매우 유연하고 확장 가능하므로, 개발 환경과 제품 환경을 위한 다양한 설정을 구분하여 관리할 수 있다.
webpack.dev.js)과 제품 환경(webpack.prod.js)에 대한 별도의 설정 파일을 작성한다.webpack-merge를 사용하여 공통 설정을 병합한다.개발 중에는 소스 맵을 활성화하여 디버깅을 쉽게 한다.
module.exports = {
// ...
devtool: 'source-map',
};
webpack-dev-server를 사용하여 개발 중 빠른 재빌드와 핫 리로딩을 지원한다.
npm install --save-dev webpack-dev-server
module.exports = {
// ...
devServer: {
contentBase: './dist',
hot: true
}
};
실제 프로젝트에서 webpack을 적용할 때, 다음과 같은 기본적인 프로젝트 구조를 가지는 것이 일반적이다:
my-app/
├── src/
│ ├── index.js
│ ├── app.js
│ ├── app.css
│ └── index.html
├── dist/
├── node_modules/
├── webpack.config.js
├── package.json
└── .babelrc (Babel 설정 파일, 필요한 경우)
src: 소스 파일들이 위치하는 디렉토리.dist: webpack으로 빌드된 결과물이 저장되는 디렉토리.webpack.config.js: webpack 설정 파일..babelrc: Babel 설정 파일(ES6 이상의 JavaScript를 사용하는 경우).엔트리와 아웃풋 설정: webpack.config.js에서 프로젝트의 진입점(entry point)과 결과물의 출력 경로(output)를 설정한다.
로더 설정: JavaScript 이외의 파일들(CSS, 이미지 등)을 처리할 수 있도록 로더를 설정한다.
플러그인 설정: HTML 파일을 자동으로 생성하거나, 환경 변수를 주입하는 등의 작업을 위해 필요한 플러그인을 설정한다.
개발 서버 설정: webpack-dev-server를 설정하여 개발 중 자동으로 브라우저를 새로고침하거나, 핫 모듈 리플레이스먼트(HMR)를 활용한다.