| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | 'use strict'// Template version: 1.3.1// see http://vuejs-templates.github.io/webpack for documentation.const path = require('path') const webpack = require('webpack')const UglifyJsPlugin = require('uglifyjs-webpack-plugin')const CompressionWebpackPlugin = require('compression-webpack-plugin')function resolve(dir) {    return path.join(__dirname, dir);}module.exports = {  dev: {    // Paths    assetsSubDirectory: 'static',    assetsPublicPath: '/',    proxyTable: {      '/api': {        target: 'http://42.192.164.187:19005',        ws: true,        changeOrigin: false,        pathRewrite: {          "^/api": ""        }      }    },    // Various Dev Server settings    host: '0.0.0.0', // can be overwritten by process.env.HOST    port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined    autoOpenBrowser: true,    errorOverlay: true,    notifyOnErrors: true,    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-        /**     * Source Maps     */    // https://webpack.js.org/configuration/devtool/#development    devtool: 'cheap-module-eval-source-map',    // If you have problems debugging vue-files in devtools,    // set this to false - it *may* help    // https://vue-loader.vuejs.org/en/options.html#cachebusting    cacheBusting: true,    cssSourceMap: true  },  build: {    // Template for index.html    index: path.resolve(__dirname, '../dist/index.html'),    // Paths    assetsRoot: path.resolve(__dirname, '../dist'),    assetsSubDirectory: 'static',    assetsPublicPath: '/',    /**     * Source Maps     */    // productionSourceMap: true,    // https://webpack.js.org/configuration/devtool/#production    devtool: '#source-map',    // Gzip off by default as many popular static hosts such as    // Surge or Netlify already gzip all static assets for you.    // Before setting to `true`, make sure to:    // npm install --save-dev compression-webpack-plugin    productionGzip: true,    productionGzipExtensions: ['js', 'css'],    // Run the build command with an extra argument to    // View the bundle analyzer report after build finishes:    // `npm run build --report`    // Set to `true` or `false` to always turn it on or off    bundleAnalyzerReport: process.env.npm_config_report,      lintOnSave: false,//禁用代码检测  productionSourceMap: false,  chainWebpack: config => {      // ============压缩图片 start============      // config.module      //     .rule('images')       //     .use('image-webpack-loader')      //     .loader('image-webpack-loader')      //     .options({ bypassOnDebug: true })      //     .end();      // ============压缩图片 end============      // 移除 prefetch 插件      config.plugins.delete('prefetch')      // 移除 preload 插件      config.plugins.delete('preload');      config.plugin('provide').use(webpack.ProvidePlugin, [{          'window.Quill': 'quill'      }])  },  configureWebpack: config => {          // 代码压缩          config.plugins.push(              new UglifyJsPlugin({                  uglifyOptions: {                      //生产环境自动删除console                      compress: {                          drop_debugger: true,                          drop_console: true,                          pure_funcs: ['console.log']                      },                      warnings: false, // 若打包错误,则注释这行                  },                  sourceMap: false,                  parallel: true              })          )          // gzip压缩          const productionGzipExtensions = ['html', 'js', 'css']          config.plugins.push(              new CompressionWebpackPlugin({                  filename: '[path].gz[query]',                  algorithm: 'gzip',                  test: new RegExp(                      '\\.(' + productionGzipExtensions.join('|') + ')$'                  ),                  threshold: 10240, // 只有大小大于该值的资源会被处理 10240                  minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理                  deleteOriginalAssets: false // 删除原文件              })          )          // 公共代码抽离          config.optimization = {              splitChunks: {                  cacheGroups: {                      vendor: {                          chunks: 'all',                          test: /node_modules/,                          name: 'vendor',                          minChunks: 1,                          maxInitialRequests: 5,                          minSize: 0,                          priority: 100                      },                      common: {                          chunks: 'all',                          test: /[\\/]src[\\/]js[\\/]/,                          name: 'common',                          minChunks: 2,                          maxInitialRequests: 5,                          minSize: 0,                          priority: 60                      },                      styles: {                          name: 'styles',                          test: /\.(sa|sc|c)ss$/,                          chunks: 'all',                          enforce: true                      },                      runtimeChunk: {                          name: 'manifest'                      }                  }              }          }        },  },}
 |