webpack의 config 파일을 보며 위에서부터 알아보겠습니다.
module.exports = {
target: ["web", "es5"],
entry: "./src/script.js",
output: {
path: path.resolve(__dirname, "docs"),
filename: "app.bundle.js",
clean: true
},
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
exclude: /node_modules/,
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "src", "index.html"),
}),
new MiniCssExtractPlugin(),
],
optimization: {
minimizer: [
new CssMinimizerPlugin(),
]
}
};
Webpack은 다양한 환경들과 target을 컴파일합니다. target은 따로 설정하지 않으면 기본값인 web으로 설정되며, 이 부분에는 web 외에도 다양한 환경을 설정 할 수 있습니다.
위의 예시에선 es5를 target 배열안에 넣었습니다. 따라서 작성된 코드를 es5 버전으로 컴파일 하게 됩니다.
들어가다, 입장의 사전적 의미를 갖는 것에서 알 수 있듯이 webpack에서의 entry는 개발자가 작성한 코드의 시작점이라고 말할 수 있습니다.
webpack은 이 entry point를 기반으로 의존하는 다른 모듈과 라이브러리를 찾아냅니다. 기본값은 "./src/index.js"입니다.
생성된 번들을 출력할 위치와 이름을 지정하는 속성입니다.
출력 파일은 기본적으로 "./dist/main.js"에, 기타 파일의 경우 "./dist" 폴더로 설정됩니다.
위의 예제에서는 output.path로 내보낼 위치를 지정하고 있습니다. path 속성을 사용할 때에는 path 모듈을 사용해야만 합니다.
Webpack은 기본적으로 JS와 JSON 파일만 읽을 수 있습니다. 하지만 loader를 사용하면 다른 유형의 파일을 처리하거나, 사용가능한 모듈로 변환하여 사용하거나, 디펜던시 그래프에 추가할 수 있습니다.
test와 use를 필수 속성으로 지니고 있으며, 이들은 module.rules 아래에 정의해야 합니다.
Plugin을 사용하여 번들을 최적화 하거나 에셋을 관리하고, 환경변수 주입 등 광범위한 작업을 수행합니다.
plugin을 사용하기 위해서 먼저 require()를 통해 plugin을 요청해야합니다. 그리고 plugins 배열에 요청한 plugin을 추가해주어야 합니다. 이때, 다른 목적으로 plugin을 여러 번 사용하도록 new 연산자를 사용해 호출하여 plugin의 인스턴스를 만들 수 있습니다.
Webpack 버전 4부터 지원하는 최적화 설정입니다.
최적화하기 위한 수단으로 다양한 옵션들이 지원되지만 대표적으로 minimize와 minimizer 등을 사용합니다.
TerserPlugin 또는 optimization.minimize에 명시된 plugins로 번들 파일을 최소화 시키는 작업 여부를 결정합니다.defualt minimizer을 커스텀된 TerserPlugin 인스턴스를 제공하여 재정의할 수 있습니다.