Vue项目中Webpack生产环境的基本配置
// node.js 路径模块 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"; // 复用 loader const commonCssLoader = [ MiniCssExtractPlugin.loader, "css-loader", { // 还需要在 package.json 中定义 browserslist loader: "postcss-loader", options: { ident: "postcss", plugins: () => [require("postcss-preset-env")()], }, }, ]; module.exports = { // 入口 entry: "./src/js/index.js", // 出口 output: { filename: "js/built.js", path: resolve(__dirname, "build"), }, // loader module: { rules: [ { test: /\.css$/, use: [...commonCssLoader], }, { test: /\.less$/, use: [...commonCssLoader, "less-loader"], }, /* 正常来讲,一个文件只能被一个 loader 处理。 当一个文件要被多个 loader 处理,那么一定要指定 loader 执行的先后顺序: 先执行 eslint 在执行 babel */ { // 在 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", }, { 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", };