"use strict"; const path = require("path"); const { version } = Math.floor(1); // 引入项目版本号 function resolve(dir) { return path.join(__dirname, dir); } const CompressionPlugin = require("compression-webpack-plugin"); const name = process.env.VUE_APP_TITLE || "若依管理系统"; // 网页标题 const port = process.env.port || process.env.npm_config_port || 80; // 端口 module.exports = { publicPath: process.env.NODE_ENV === "production" ? "/" : "/", outputDir: "dist", assetsDir: "static", lintOnSave: process.env.NODE_ENV === "development", productionSourceMap: false, transpileDependencies: ["quill"], devServer: { host: "0.0.0.0", port: port, open: true, proxy: { [process.env.VUE_APP_BASE_API]: { target: `http://10.21.10.67:8088`, //本地 // target: `http://192.168.18.50:7002`, //测试库 changeOrigin: true, pathRewrite: { ["^" + process.env.VUE_APP_BASE_API]: "", }, }, }, disableHostCheck: true, headers: { "Cache-Control": "no-cache, no-store, must-revalidate", Pragma: "no-cache", Expires: 0, }, }, css: { loaderOptions: { sass: { sassOptions: { outputStyle: "expanded" }, }, }, }, configureWebpack: { name: name, cache: false, output: { hashDigestLength: 8, // 调整哈希长度 }, resolve: { alias: { "@": resolve("src"), }, }, module: { rules: [ { test: /\.worker\.js$/, use: { loader: "worker-loader", options: { inline: "fallback", filename: `[name].[contenthash:8].worker.js?v=${version}`, // 添加版本号作为查询参数 }, }, }, ], }, plugins: [ new CompressionPlugin({ cache: false, test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, filename: "[path][base].gz[query]", algorithm: "gzip", minRatio: 0.8, deleteOriginalAssets: false, }), ], }, chainWebpack(config) { config.plugins.delete("preload"); config.plugins.delete("prefetch"); config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end(); config.module .rule("icons") .test(/\.svg$/) .include.add(resolve("src/assets/icons")) .end() .use("svg-sprite-loader") .loader("svg-sprite-loader") .options({ symbolId: "icon-[name]", }) .end(); config.when(process.env.NODE_ENV !== "development", (config) => { config .plugin("ScriptExtHtmlWebpackPlugin") .after("html") .use("script-ext-html-webpack-plugin", [ { inline: /runtime\..*\.js$/, }, ]) .end(); config.optimization.splitChunks({ chunks: "all", cacheGroups: { libs: { name: "chunk-libs", test: /[\\/]node_modules[\\/]/, priority: 10, chunks: "initial", }, elementUI: { name: "chunk-elementUI", test: /[\\/]node_modules[\\/]_?element-ui(.*)/, priority: 20, }, commons: { name: "chunk-commons", test: resolve("src/components"), minChunks: 3, priority: 5, reuseExistingChunk: true, }, }, }); config.optimization.runtimeChunk("single"); }); }, };