123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- const path = require("path");
- const glob = require("glob");
- const MiniCssExtractPlugin = require("mini-css-extract-plugin");
- const TerserPlugin = require("terser-webpack-plugin");
- const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
- const CopyWebpackPlugin = require("copy-webpack-plugin");
- module.exports = (env, options) => {
- const devMode = options.mode !== "production";
- return {
- optimization: {
- minimizer: [
- new TerserPlugin({ cache: true, parallel: true, sourceMap: devMode }),
- new OptimizeCSSAssetsPlugin({}),
- ],
- },
- entry: {
- app: glob.sync("./vendor/**/*.js").concat(["./js/app.js"]),
- },
- output: {
- filename: "[name].js",
- path: path.resolve(__dirname, "../priv/static/js"),
- publicPath: "/js/",
- },
- devtool: devMode ? "source-map" : undefined,
- module: {
- rules: [
- {
- test: /\.js$/,
- exclude: /node_modules/,
- use: {
- loader: "babel-loader",
- },
- },
- {
- test: /\.(woff|woff2|ttf|eot)$/,
- use: "file-loader?name=fonts/[name].[ext]!static",
- },
- {
- test: /\.[s]?css$/,
- use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
- },
- ],
- },
- plugins: [
- new MiniCssExtractPlugin({ filename: "../css/app.css" }),
- new CopyWebpackPlugin([{ from: "static/", to: "../" }]),
- ],
- };
- };
|