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 91 92 93 94 95 96 97 98 99 100 101 102 103
| const path = require("path"); const HotHashWebpackPlugin = require("hot-hash-webpack-plugin"); const WebpackBar = require("webpackbar"); const resolve = (dir) => path.join(__dirname, ".", dir);
module.exports = { productionSourceMap: false, publicPath: "./", outputDir: "dist", assetsDir: "assets", devServer: { port: 9999, host: "0.0.0.0", https: false, open: true, },
chainWebpack: (config) => { const types = ["vue-modules", "vue", "normal-modules", "normal"]; types.forEach((type) => { let rule = config.module.rule("less").oneOf(type); rule .use("style-resource") .loader("style-resources-loader") .options({ patterns: [path.resolve(__dirname, "./lessVariates.less")], }); });
config.resolve.alias .set("@", resolve("src")) .set("api", resolve("src/apis")) .set("common", resolve("src/common"));
config.module .rule("images") .use("url-loader") .tap((options) => ({ name: "./assets/images/[name].[ext]", quality: 85, limit: 0, esModule: false, }));
config.module .rule("svg") .test(/.svg$/) .include.add(resolve("src/svg")) .end() .use("svg-sprite-loader") .loader("svg-sprite-loader");
config.plugin("define").tap((args) => [ { ...args, "window.isDefine": JSON.stringify(true), }, ]);
if (process.env.NODE_ENV === "production") { config.output.filename("./js/[name].[chunkhash:8].js"); config.output.chunkFilename("./js/[name].[chunkhash:8].js"); config.plugin("extract-css").tap((args) => [ { filename: "css/[name].[contenthash:8].css", chunkFilename: "css/[name].[contenthash:8].css", }, ]); config .plugin("hotHash") .use(HotHashWebpackPlugin, [{ version: "1.0.0" }]); config.plugin("webpackBar").use(WebpackBar);
config.optimization .minimize(true) .minimizer("terser") .tap((args) => { let { terserOptions } = args[0]; terserOptions.compress.drop_console = true; terserOptions.compress.drop_debugger = true; return args; }); config.optimization.splitChunks({ cacheGroups: { common: { name: "common", chunks: "all", minSize: 1, minChunks: 2, priority: 1, }, vendor: { name: "chunk-libs", chunks: "all", test: /[\/]node_modules[\/]/, priority: 10, }, }, }); } }, };
|