1. 程式人生 > 實用技巧 >Vue專案中Webpack生產環境的基本配置

Vue專案中Webpack生產環境的基本配置

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"), }, 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", };