const path = require("path"); const FileManagerPlugin = require("filemanager-webpack-plugin"); const resolve = dir => { return path.join(__dirname, dir); }; // 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: 9090, disableHostCheck: true, // 配置自动启动浏览器 open: true, proxy: { "/rlc-admin/": { // 代理api target: process.env.VUE_APP_API_HOST, // 服务器api地址- changeOrigin: true, // 是否跨域 ws: true, // proxy websockets pathRewrite: { // 重写路径 "^/rlc-admin": "" } }, "/rlc-cts/": { // 代理api target: process.env.VUE_APP_CTS_API_URL, // 服务器api地址- changeOrigin: true, // 是否跨域 pathRewrite: { // 重写路径 "^/rlc-cts": "" } } } }, // 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 }) ); 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.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 // } // } // }); config.resolve.alias .set("@", resolve("src")) .set("assets", resolve("src/assets")) .set("components", resolve("src/components")); } };