index.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. 'use strict'
  2. // Template version: 1.3.1
  3. // see http://vuejs-templates.github.io/webpack for documentation.
  4. const path = require('path')
  5. const webpack = require('webpack')
  6. const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
  7. const CompressionWebpackPlugin = require('compression-webpack-plugin')
  8. function resolve(dir) {
  9. return path.join(__dirname, dir);
  10. }
  11. module.exports = {
  12. dev: {
  13. // Paths
  14. assetsSubDirectory: 'static',
  15. assetsPublicPath: '/',
  16. proxyTable: {
  17. '/api': {
  18. target: 'http://42.192.164.187:19005',
  19. ws: true,
  20. changeOrigin: false,
  21. pathRewrite: {
  22. "^/api": ""
  23. }
  24. }
  25. },
  26. // Various Dev Server settings
  27. host: '0.0.0.0', // can be overwritten by process.env.HOST
  28. port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
  29. autoOpenBrowser: true,
  30. errorOverlay: true,
  31. notifyOnErrors: true,
  32. poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
  33. /**
  34. * Source Maps
  35. */
  36. // https://webpack.js.org/configuration/devtool/#development
  37. devtool: 'cheap-module-eval-source-map',
  38. // If you have problems debugging vue-files in devtools,
  39. // set this to false - it *may* help
  40. // https://vue-loader.vuejs.org/en/options.html#cachebusting
  41. cacheBusting: true,
  42. cssSourceMap: true
  43. },
  44. build: {
  45. // Template for index.html
  46. index: path.resolve(__dirname, '../dist/index.html'),
  47. // Paths
  48. assetsRoot: path.resolve(__dirname, '../dist'),
  49. assetsSubDirectory: 'static',
  50. assetsPublicPath: '/',
  51. /**
  52. * Source Maps
  53. */
  54. // productionSourceMap: true,
  55. // https://webpack.js.org/configuration/devtool/#production
  56. devtool: '#source-map',
  57. // Gzip off by default as many popular static hosts such as
  58. // Surge or Netlify already gzip all static assets for you.
  59. // Before setting to `true`, make sure to:
  60. // npm install --save-dev compression-webpack-plugin
  61. productionGzip: true,
  62. productionGzipExtensions: ['js', 'css'],
  63. // Run the build command with an extra argument to
  64. // View the bundle analyzer report after build finishes:
  65. // `npm run build --report`
  66. // Set to `true` or `false` to always turn it on or off
  67. bundleAnalyzerReport: process.env.npm_config_report,
  68. lintOnSave: false,//禁用代码检测
  69. productionSourceMap: false,
  70. chainWebpack: config => {
  71. // ============压缩图片 start============
  72. // config.module
  73. // .rule('images')
  74. // .use('image-webpack-loader')
  75. // .loader('image-webpack-loader')
  76. // .options({ bypassOnDebug: true })
  77. // .end();
  78. // ============压缩图片 end============
  79. // 移除 prefetch 插件
  80. config.plugins.delete('prefetch')
  81. // 移除 preload 插件
  82. config.plugins.delete('preload');
  83. config.plugin('provide').use(webpack.ProvidePlugin, [{
  84. 'window.Quill': 'quill'
  85. }])
  86. },
  87. configureWebpack: config => {
  88. // 代码压缩
  89. config.plugins.push(
  90. new UglifyJsPlugin({
  91. uglifyOptions: {
  92. //生产环境自动删除console
  93. compress: {
  94. drop_debugger: true,
  95. drop_console: true,
  96. pure_funcs: ['console.log']
  97. },
  98. warnings: false, // 若打包错误,则注释这行
  99. },
  100. sourceMap: false,
  101. parallel: true
  102. })
  103. )
  104. // gzip压缩
  105. const productionGzipExtensions = ['html', 'js', 'css']
  106. config.plugins.push(
  107. new CompressionWebpackPlugin({
  108. filename: '[path].gz[query]',
  109. algorithm: 'gzip',
  110. test: new RegExp(
  111. '\\.(' + productionGzipExtensions.join('|') + ')$'
  112. ),
  113. threshold: 10240, // 只有大小大于该值的资源会被处理 10240
  114. minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
  115. deleteOriginalAssets: false // 删除原文件
  116. })
  117. )
  118. // 公共代码抽离
  119. config.optimization = {
  120. splitChunks: {
  121. cacheGroups: {
  122. vendor: {
  123. chunks: 'all',
  124. test: /node_modules/,
  125. name: 'vendor',
  126. minChunks: 1,
  127. maxInitialRequests: 5,
  128. minSize: 0,
  129. priority: 100
  130. },
  131. common: {
  132. chunks: 'all',
  133. test: /[\\/]src[\\/]js[\\/]/,
  134. name: 'common',
  135. minChunks: 2,
  136. maxInitialRequests: 5,
  137. minSize: 0,
  138. priority: 60
  139. },
  140. styles: {
  141. name: 'styles',
  142. test: /\.(sa|sc|c)ss$/,
  143. chunks: 'all',
  144. enforce: true
  145. },
  146. runtimeChunk: {
  147. name: 'manifest'
  148. }
  149. }
  150. }
  151. }
  152. },
  153. },
  154. }