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