mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-11-04 05:27:04 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.9 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$/,
 | 
						|
                use: "html-loader",
 | 
						|
            },
 | 
						|
            {
 | 
						|
                test: /\.woff2$/,
 | 
						|
                use: "woff-loader",
 | 
						|
            },
 | 
						|
            {
 | 
						|
                test: /\.scss$/,
 | 
						|
                use: [
 | 
						|
                    { loader: "style-loader" },
 | 
						|
                    { loader: "css-loader" },
 | 
						|
                    { loader: "sass-loader" },
 | 
						|
                ],
 | 
						|
            },
 | 
						|
            {
 | 
						|
                test: /\.css$/,
 | 
						|
                use: [
 | 
						|
                    { loader: "style-loader" },
 | 
						|
                    { 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 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()
 | 
						|
    ],
 | 
						|
    resolve: {
 | 
						|
        fallback: {
 | 
						|
            "path": require.resolve("path-browserify"),
 | 
						|
            "crypto": require.resolve("crypto-browserify"),
 | 
						|
            "buffer": require.resolve("buffer/"),
 | 
						|
            "stream": require.resolve("stream-browserify"),
 | 
						|
        },
 | 
						|
    },
 | 
						|
    mode: process.env.NODE_ENV || "production",
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
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;
 |