98 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const path = require("path");
 | 
						|
const webpack = require("webpack");
 | 
						|
const sass = require("sass");
 | 
						|
 | 
						|
const { VueLoaderPlugin } = require("vue-loader");
 | 
						|
// const MiniCssExtractPlugin = require("mini-css-extract-plugin");
 | 
						|
const TerserPlugin = require("terser-webpack-plugin");
 | 
						|
 | 
						|
const publicPath = path.resolve(__dirname, "public");
 | 
						|
const isProd = process.env.NODE_ENV === "production";
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  context: path.resolve(__dirname, "src"),
 | 
						|
  entry: "/main.js",
 | 
						|
  output: {
 | 
						|
    path: `${publicPath}/dist/`,
 | 
						|
    publicPath: "/dist/",
 | 
						|
    filename: "build.js",
 | 
						|
    clean: true
 | 
						|
  },
 | 
						|
  module: {
 | 
						|
    rules: [
 | 
						|
      {
 | 
						|
        test: /\.js$/,
 | 
						|
        loader: "babel-loader",
 | 
						|
        options: {
 | 
						|
          presets: ["@babel/preset-env"]
 | 
						|
        },
 | 
						|
        exclude: /node_modules/
 | 
						|
      },
 | 
						|
      {
 | 
						|
        test: /\.vue$/,
 | 
						|
        use: ["vue-loader"]
 | 
						|
      },
 | 
						|
      {
 | 
						|
        test: /\.scss$/,
 | 
						|
        use: [
 | 
						|
          "vue-style-loader",
 | 
						|
          // isProd ? MiniCssExtractPlugin.loader : "vue-style-loader",
 | 
						|
          "css-loader",
 | 
						|
          "sass-loader"
 | 
						|
        ]
 | 
						|
      },
 | 
						|
      {
 | 
						|
        test: /\.(png|jpg|gif|svg)$/,
 | 
						|
        loader: "file-loader",
 | 
						|
        options: {
 | 
						|
          name: "[name].[ext]?[hash]"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  },
 | 
						|
  plugins: [new VueLoaderPlugin()],
 | 
						|
  resolve: {
 | 
						|
    extensions: [".js", ".vue", ".json", ".scss"],
 | 
						|
    alias: {
 | 
						|
      vue$: "vue/dist/vue.common.js",
 | 
						|
      "@": path.resolve(__dirname, "src"),
 | 
						|
      src: path.resolve(__dirname, "src"),
 | 
						|
      assets: `${publicPath}/assets`,
 | 
						|
      components: path.resolve(__dirname, "src/components")
 | 
						|
    }
 | 
						|
  },
 | 
						|
  devServer: {
 | 
						|
    static: publicPath,
 | 
						|
    historyApiFallback: {
 | 
						|
      index: "index.html"
 | 
						|
    },
 | 
						|
    compress: true,
 | 
						|
    port: 8080
 | 
						|
  },
 | 
						|
  performance: {
 | 
						|
    hints: false
 | 
						|
  },
 | 
						|
  optimization: {
 | 
						|
    minimizer: [
 | 
						|
      new TerserPlugin({
 | 
						|
        parallel: true,
 | 
						|
        terserOptions: {
 | 
						|
          // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
 | 
						|
        }
 | 
						|
      })
 | 
						|
    ]
 | 
						|
  },
 | 
						|
  devtool: "inline-source-map"
 | 
						|
};
 | 
						|
 | 
						|
if (isProd) {
 | 
						|
  module.exports.mode = "production";
 | 
						|
  module.exports.devtool = false;
 | 
						|
  // module.exports.plugins.push(
 | 
						|
  //   new MiniCssExtractPlugin({
 | 
						|
  //     filename: "[name].css",
 | 
						|
  //     chunkFilename: "[id].css"
 | 
						|
  //   })
 | 
						|
  // );
 | 
						|
}
 |