mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 10:07:15 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const webpack = require("webpack");
 | |
| const path = require("path");
 | |
| const HtmlWebpackPlugin = require("html-webpack-plugin");
 | |
| // const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
 | |
| const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
 | |
| const CopyWebpackPlugin = require("copy-webpack-plugin");
 | |
| const CompressionPlugin = require("compression-webpack-plugin");
 | |
| 
 | |
| const config = {
 | |
|     entry: {
 | |
|         app: path.join(__dirname, "client", "index.js"),
 | |
|     },
 | |
|     output: {
 | |
|         path: path.join(__dirname, "server", "ctrl", "static", "www"),
 | |
|         publicPath: "/",
 | |
|         filename: "assets/js/[name]_[chunkhash].js",
 | |
|         chunkFilename: "assets/js/chunk_[name]_[id]_[chunkhash].js",
 | |
|     },
 | |
|     module: {
 | |
|         rules: [
 | |
|             {
 | |
|                 test: path.join(__dirname, "client"),
 | |
|                 use: ["babel-loader"],
 | |
|                 exclude: /node_modules/,
 | |
|             },
 | |
|             {
 | |
|                 test: /\.html$/,
 | |
|                 loader: "html-loader",
 | |
|             },
 | |
|             {
 | |
|                 test: /\.woff2$/,
 | |
|                 loader: "woff-loader",
 | |
|             },
 | |
|             {
 | |
|                 test: /\.scss$/,
 | |
|                 loaders: ["style-loader", "css-loader", "sass-loader"],
 | |
|             },
 | |
|             {
 | |
|                 test: /\.css$/,
 | |
|                 loaders: ["style-loader", "css-loader"],
 | |
|             },
 | |
|             {
 | |
|                 test: /\.(pdf|jpg|png|gif|svg|ico|woff|woff2|eot|ttf)$/,
 | |
|                 loader: "url-loader",
 | |
|             },
 | |
|             {
 | |
|                 test: /[a-z]+\.worker\.js$/,
 | |
|                 loader: "worker-loader",
 | |
|                 options: { name: "assets/js/[name]_[hash].js" },
 | |
|             },
 | |
|         ],
 | |
|     },
 | |
|     plugins: [
 | |
|         new webpack.DefinePlugin({
 | |
|             "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV),
 | |
|         }),
 | |
|         new webpack.optimize.OccurrenceOrderPlugin(),
 | |
|         new HtmlWebpackPlugin({
 | |
|             template: path.join(__dirname, "client", "index.html"),
 | |
|             inject: true,
 | |
|             minify: {
 | |
|                 collapseWhitespace: true,
 | |
|                 removeComments: true,
 | |
|                 minifyJS: true,
 | |
|                 minifyCSS: true,
 | |
|             },
 | |
|         }),
 | |
|         new CopyWebpackPlugin([
 | |
|             { from: "locales/*.json", to: "assets/" },
 | |
|             { from: "worker/*.js", to: "assets/" },
 | |
|             { from: "assets/logo/*" },
 | |
|             { from: "assets/img/*" },
 | |
|             { from: "assets/icons/*" },
 | |
|             { from: "assets/fonts/*" },
 | |
|         ], { context: path.join(__dirname, "client") }),
 | |
|         new CopyWebpackPlugin([
 | |
|             { from: "node_modules/pdfjs-dist/build/*.js", to: "assets/vendor/" },
 | |
|             { from: "node_modules/pdfjs-dist/cmaps/*", to: "assets/vendor/" },
 | |
|         ]),
 | |
|         // new BundleAnalyzerPlugin()
 | |
|     ],
 | |
| };
 | |
| 
 | |
| 
 | |
| if (process.env.NODE_ENV === "production") {
 | |
|     config.plugins.push(new UglifyJSPlugin({
 | |
|         sourceMap: false,
 | |
|         extractComments: true,
 | |
|     }));
 | |
|     config.plugins.push(new CompressionPlugin({
 | |
|         asset: "[path].gz[query]",
 | |
|         algorithm: "gzip",
 | |
|         test: /\.js$|\.json$|\.html$|\.svg|\.ico$/,
 | |
|         threshold: 0,
 | |
|         minRatio: 0.8,
 | |
|     }));
 | |
|     config.plugins.push(new CompressionPlugin({
 | |
|         asset: "[path].br[query]",
 | |
|         algorithm: "brotliCompress",
 | |
|         test: /\.js$|\.json$|\.html$|\.svg|\.ico$/,
 | |
|         threshold: 0,
 | |
|         minRatio: 0.8,
 | |
|     }));
 | |
| } else {
 | |
|     config.devtool = "#inline-source-map";
 | |
| }
 | |
| 
 | |
| module.exports = config;
 | 
