1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| const HtmlWebpackPlugin = require("html-webpack-plugin"); const { DefinePlugin } = require("webpack"); const CopyWebpackPlugin = require("copy-webpack-plugin");
module.exports = { entry: "./src/index.tsx", resolve: { extensions: [".tsx", ".ts", ".jsx", ".js"], }, module: { rules: [ { test: /\.css$/i, use: [ "style-loader", { loader: "css-loader", options: { esModule: false, }, }, "postcss-loader", ], }, { test: /\.s[ac]ss$/i, use: [ "style-loader", { loader: "css-loader", options: { esModule: false, }, }, "postcss-loader", "sass-loader", ], }, { test: /\.tsx?$/i, use: ["babel-loader"], exclude: /node_modules/, }, { test: /\.(png|svg|gif|jpe?g)$/i, type: "asset", generator: { filename: "img/[name].[hash:6][ext]", }, parser: { dataUrlCondition: { maxSize: 25 * 1024, }, }, }, { test: /\.(ttf|woff2?)$/i, type: "asset/resource", generator: { filename: "font/[name].[hash:6][ext]", }, }, { test: /\.jsx?$/i, use: ["babel-loader"], exclude: /node_modules/, }, ], }, plugins: [ new HtmlWebpackPlugin({ title: "Webpack Learning", template: "./public/index.html", }), new DefinePlugin({ BASE_URL: '"./"', }), new CopyWebpackPlugin({ patterns: [ { from: "public", globOptions: { ignore: ["**/index.html"], }, }, ], }), ], };
|