사용자에게 웹애플리케이션을 제공하기 위한 파일 묶음
필연적으로 용량을 줄이고 파일을 통일하는 툴링작업이 필요함
FE 애플리케이션 배포를 위해 가장 많이 사용하는 번들러
여러개의 파일을 하나의 파일로 합쳐주는 모듈 번들러
모듈번들러: HTML, CSS, JS 등의 자원을 전부 각각의 모듈로 보고 이를 조합해 하나의 묶음으로 번들링하는 도구
개발이 완료된 앱을 배포하기 위해 하나의 폴더로 구성하여 준비하는 작업
cf) React : npm run build
=> React 빌드 작업이 진행되고 index.html 파일에 압축되어 배포에 최적화된 상태를 제공해 줌
파일을 묶는 작업
의존적 관계에 있는 파일들(import, export) 그 자체 혹은 내부적으로 포함되어있는 모듈
모듈 간 의존성을 파악해 그룹화 하는 작업
웹 애플리케이션의 빠른 로딩 속도와 높은 성능을 위해 필요
기본값은 web. esX를 넣으면 지정된 ECMAScript 버전으로 컴파일 가능
Browser Compatibility와 연관된 속성
module.exports = {
target: ["web", "es5"],
};
코드의 시작점
Entry 속성은 Entry point라고 하며 webpack의 내부 디펜던시 그래프를 생성하기 위해 사용해야하는 모듈
//기본 값
module.exports = {
...
entry: "./src/index.js",
};
//지정 값
module.exports = {
...
entry: "./src/script.js",
};
생성된 번들을 내보낼 위치와 파일이름 지정방법을 webpack에 알려주는 역할
const path = require('path');
module.exports = {
...
output: {
path: path.resolve(__dirname, "docs"), // 절대 경로로 설정을 해야 합니다.
filename: "app.bundle.js",
clean: true
},
};
기존 출력 파일: ./dist/main.js
생성된 기타 파일: ./dist
Webpack은 기본적으로 JS와 Json 파일만 이해하지만, loader를 사용하면 Webpack이 다른 유형의 파일을 처리하거나 그들을 유효한 모듈로 변환해 애플리케이션에 사용 가능하게 함
module.exports = {
...
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
exclude: /node_modules/,
},
],
},
};
-test
: 변환이 필요한 파일들을 식별하기 위한 속성
-use
: 변환을 수행하는 데 사용되는 로더를 가르키는 속성
-exclude
: 바벨로 컴파일하지 않을 파일 or 폴더 지정
-include
: 반드시 컴파일해야할 파일 or 폴더 지저
test
와 use
속성은 필수속성
반드시 module.rules
아래에 정의해야함. (rules
아래에 정의하면 경고 뜸)
번들을 최적화, 에셋 관리, 환경변수 주입 등의 광범위한 작업 수행 가능
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(),
],
};
선택한 항목에 따라 최적화
module.exports = {
...
optimization: {
minimizer: [
new CssMinimizerPlugin(),
]
}
}; // mini-css-extract-plugin에 관련된 번들 최소화
TerserPlugin
또는 optimization.minimize
에 명시된 plugins로 bundle 파일 최소화(압축) 작업 여부 결정default minimizer
을 커스텀 된 TerserPlugin
인스턴스를 제공해서 재정의