zhaoxiaoqiang1
2026-01-04 f1d30d03186c79ca2cbcfe60d6d2ce7d73fba97b
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
const path = require("path");
const FileManagerPlugin = require("filemanager-webpack-plugin");
 
const resolve = dir => {
  return path.join(__dirname, dir);
};
const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); // 去掉注释
const md5 = require("js-md5");
// gzip --start
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const productionGzipExtensions = ["js", "css"]; // 需要gzip压缩的文件后缀
module.exports = {
  // build时构建文件的目录 构建时传入 --no-clean 可关闭该行为
  outputDir: "dist",
 
  // build时放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
  assetsDir: "static",
 
  // 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。
  indexPath: "index.html",
 
  // 默认在生成的静态资源文件名中包含hash以控制缓存
  filenameHashing: true,
  publicPath: "./",
  lintOnSave: process.env.NODE_ENV !== "production",
  productionSourceMap: process.env.NODE_ENV !== "production",
  devServer: {
    port: 8080,
    // 默认打开浏览器
    open: true,
    disableHostCheck: true,
    proxy: {
      "/api/": {
        // 代理api
        target: "http://10.1.1.163/", // 服务器api地址-
        changeOrigin: true, // 是否跨域
        ws: true, // proxy websockets
        pathRewrite: {
          // 重写路径
          "^/api": ""
        }
      }
    }
  },
  // css的处理
  css: {
    // 当为true时,css文件名可省略 module 默认为 false
    modules: false,
    // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中,当作为一个库构建时,你也可以将其设置为 false 免得用户自己导入 CSS
    // 默认生产环境下是 true,开发环境下是 false
    extract: false,
    // 是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能
    sourceMap: false,
    //向 CSS 相关的 loader 传递选项(支持 css-loader postcss-loader sass-loader less-loader stylus-loader)
    loaderOptions: {
      css: {},
      less: {}
    }
  },
  // 如果你需要基于环境有条件地配置行为,或者想要直接修改配置,那就换成一个函数 (该函数会在环境变量被设置之后懒执行)。该方法的第一个参数会收到已经解析好的配置。在函数内,你可以直接修改配置,或者返回一个将会被合并的对象
  configureWebpack: config => {
    const TerserPlugin = require("terser-webpack-plugin");
    if (process.env.NODE_ENV === "production") {
      config.optimization = {
        minimizer: [
          new TerserPlugin({
            terserOptions: {
              ecma: undefined,
              warnings: false,
              parse: {},
              compress: {
                drop_console: true,
                drop_debugger: false,
                pure_funcs: ["console.log"] // 移除console
              }
            }
          })
        ]
      };
      // gzip
      // 2. 构建时开启gzip,降低服务器压缩对CPU资源的占用,服务器也要相应开启gzip
      config.plugins.push(
        new CompressionWebpackPlugin({
          algorithm: "gzip",
          test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
          threshold: 10240,
          minRatio: 0.8
        })
      );
      // 打包zip
      config.plugins.push(
        new FileManagerPlugin({
          events: {
            onEnd: {
              delete: ["./dist/dist.zip"],
              archive: [{ source: "./dist", destination: "./dist/dist.zip" }]
            }
          }
        })
      );
    }
  },
  chainWebpack: config => {
    config.plugins.delete("prefetch");
    config.resolve.alias
      .set("@", resolve("src"))
      .set("@views", resolve("src/views"))
      .set("@assets", resolve("src/assets"))
      .set("@components", resolve("src/views/components"));
    // config.optimization.namedChunks(true);
    // config.optimization.splitChunks({
    //   cacheGroups: {
    //     vendors: {
    //       name: "chunkstark-vendors",
    //       test: /[\\/]node_modules[\\/]/,
    //       priority: -10,
    //       chunks: "initial"
    //     },
    //     common: {
    //       name: "chunk-common",
    //       minChunks: 2,
    //       maxSize: 100,
    //       priority: -20,
    //       chunks: "initial",
    //       reuseExistingChunk: true
    //     }
    //   }
    // });
  }
};