const { resolve } = require("path");const MiniCssExtractPlugin = require("mini-css-extract-plugin");const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin");const HtmlWebpackPlugin = require("html-webpack-plugin");// 定义 nodejs 环境变量:决定使用 browserslist 的哪个环境process.env.NODE_ENV = "production";// 复用 loaderconst commonCssLoader = [ MiniCssExtractPlugin.loader, "css-loader", { // 还需要在 package.json 中定义 browserslist loader: "postcss-loader", options: { postcssOptions: { ident: "postcss", plugins: () => [ //帮助css找到package.json中的browserslist里面的配置,通过加载指定的css样式 require("postcss-preset-env")(), ], }, }, },];module.exports = { entry: "./src/js/index.js", output: { filename: "js/built.js", path: resolve(__dirname, "build"), }, module: { rules: [ { test: /\.css$/, use: [...commonCssLoader] }, { test: /\.less$/, use: [...commonCssLoader, "less-loader"] }, { // 在 package.json 中 eslintConfig --> airbnb test: /\.js$/, exclude: /node_modules/, // 优先执行 enforce: "pre", loader: "eslint-loader", options: { fix: true }, }, { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader", options: { presets: [ [ "@babel/preset-env", { useBuiltIns: "usage", corejs: { version: 3 }, targets: { chrome: "60", firefox: "50" }, }, ], ], }, }, { test: /\.(jpg|png|gif)/, loader: "url-loader", options: { limit: 8 * 1024, name: "[hash:10].[ext]", outputPath: "imgs", esModule: false, }, }, { test: /\.html$/, loader: "html-loader", options: { esModule: false, } }, { exclude: /\.(js|css|less|html|jpg|png|gif)/, loader: "file-loader", options: { outputPath: "media" }, }, ], }, plugins: [ new MiniCssExtractPlugin({ filename: "css/built.css" }), new OptimizeCssAssetsWebpackPlugin(), new HtmlWebpackPlugin({ template: "./src/index.html", minify: { collapseWhitespace: true, removeComments: true, }, }), ], mode: "production",};