💡 우리가 개발을 하다보면 개발 환경에서의 설정 파일 내용과 프로덕션 환경에서의 설정 내용이 다른 경우가 굉장히 많은 편이다. 따라서 대부분의 경우, 개발용 설정 파일과 프로덕션용 설정 파일을 분리해아할 상황이 생긴다! 때문에 이를 정리해보려고 한다.
웹팩 설정 파일 내 mode
옵션을 사용하면 설정을 구분해서 작성할 수 있다.
mode
옵션의 종류에는 develop
, production
(기본값), none
3개가 있다.
mode 옵션을 CLI에 적용하는 방법
webpack --mode=development
// webpack.development.config.js
module.exports = {
mode: 'developmenet'
}
// webpack.development.config.js
module.exports = {
mode: "development",
entry: "./src/js/index.js",
plugins: [new HtmlWebpackPlugin({ template: "index.html" })],
module: {
rules: [
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
},
{
test: /\.(png|jpg|gif)$/i,
use: ["file-loader"],
},
],
},
devtool: "eval-source-map",
devServer: {
host: "0.0.0.0",
port: 8000,
status: "errors-warnings",
},
};
// webpack.production.config.js
module.exports = {
mode: "production",
entry: "./src/js/index.js",
output: {
path: path.resolve(process.cwd(), "dist"),
filename: "[name].[contethash].js",
environment: {
arrowFunction: false,
},
},
plugins: [
new HtmlWebpackPlugin({ template: "index.html" }),
new MiniCssExtractPlugin(),
new CleanWebpackPlugin(),
],
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
{
test: /\.(png|jpg|gif)$/i,
use: ["file-loader"],
},
],
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
extractComments: false,
}),
new CssMinimizerPlugin(),
],
},
};
// webpack.config.js (모드에 따라 설정 파일 사용하도록)
const developmentConfig = require("./webpack.development.config");
const productionConfig = require("./webpack.production.config");
module.exports = (env, { mode }) => {
return mode === "production" ? productionConfig : developmentConfig;
};
// package.json
{
"scripts": {
"build:dev": "webpack --config webpack.config.js --mode=development",
"build:prod": "webpack --config webpack.config.js --mode=production"
}
}
--mode
로 넘긴 값이 위의 코드 속 mode 매개변수의 값으로 들어간다.npm run build:dev
npm run build:prod
이렇게 해서 웹팩에 대해 알아보았다. 다음에는 Babel에 대해서 알아보는 시간을 가질 것이다.
깔끔하게 정리해서 ~ 한눈에 보기 좋네요. 감사합니다.
항상 응원합니다.