// 在vue-config.js 中加入 const Timestamp = new Date().getTime(); const CompressionWebpackPlugin = require('compression-webpack-plugin'); const productionGzipExtensions = ['js', 'css']; const isProduction = process.env.NODE_ENV === 'production'; module.exports = { publicPath: process.env.NODE_ENV === "production" ? "./" : "./", // 部署应用时的根路径(默认'/'),也可用相对路径(存在使用限制) outputDir: process.env.outputDir, //process.env.outputDir 运行时生成的生产环境构建文件的目录(默认''dist'',构建之前会被清除) assetsDir: "static", //放置生成的静态资源(s、css、img、fonts)的(相对于 outputDir 的)目录(默认'') lintOnSave: false, // 是否开启eslint保存检测 productionSourceMap: false, // 是否在构建生产包时生成sourcdeMap devServer: { /* 本地ip地址 */ host: "0.0.0.0", port: "8020", hot: true, /* 自动打开浏览器 */ open: false, overlay: { warning: false, error: true }, // 错误、警告在页面弹出 /* 跨域代理 */ proxy: { "/api": { /* 目标代理服务器地址 */ // target: process.env.VUE_APP_API, target: 'http://127.0.0.1:8089', /* 允许跨域 */ changeOrigin: true, ws: true, pathRewrite: { "^/api": "" } } } }, configureWebpack: config => { if (isProduction) { config.plugins.push(new CompressionWebpackPlugin({ algorithm: 'gzip', test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'), threshold: 10240, minRatio: 0.8 })) } config["externals"] = { // 'vue': 'Vue', // 'vue-router': 'VueRouter', // 'vuex': 'Vuex', // 'axios': 'axios' } config["performance"] = { hints: 'warning', // 入口起点的最大体积 整数类型(以字节为单位) maxEntrypointSize: 50000000, // 生成文件的最大体积 整数类型(以字节为单位 300k) maxAssetSize: 30000000, // 只给出 js 文件的性能提示 assetFilter: function (assetFilename) { return assetFilename.endsWith('.js') } }, // 输出重构 config.output.filename = `js/[name].${Timestamp}.js` config.output.chunkFilename = `js/[name].${Timestamp}.js` }, css: { extract: { filename: `css/[name].${Timestamp}.css`, chunkFilename: `css/[name].${Timestamp}.css` } }, chainWebpack: config => { // 移除prefetch插件 config.plugins.delete("prefetch"); config.plugins.delete('preload'); } }