vue.config.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const CompressionWebpackPlugin = require("compression-webpack-plugin");
  2. const path = require('path')
  3. const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;
  4. module.exports = {
  5. publicPath: './', // 相对于 HTML 页面(目录相同)
  6. chainWebpack: config => {
  7. config.module
  8. .rule('css')
  9. .test(/\.css$/)
  10. .oneOf('vue')
  11. .resourceQuery(/\?vue/)
  12. .use('px2rem')
  13. .loader('px2rem-loader')
  14. .options({
  15. remUnit: 192 //代表的是 1rem = ?px 这里假设设计稿是 1920px ,那么这里的比例就是 1/10
  16. })
  17. .end()
  18. },
  19. configureWebpack: config => {
  20. if(process.env.NODE_ENV === 'production') {
  21. config.plugins.push(
  22. new CompressionWebpackPlugin({
  23. /* [file]被替换为原始资产文件名。
  24. [path]替换为原始资产的路径。
  25. [dir]替换为原始资产的目录。
  26. [name]被替换为原始资产的文件名。
  27. [ext]替换为原始资产的扩展名。
  28. [query]被查询替换。*/
  29. filename: '[path].gz[query]',
  30. //压缩算法
  31. algorithm: 'gzip',
  32. //匹配文件
  33. test: productionGzipExtensions,
  34. //压缩超过此大小的文件,以字节为单位
  35. threshold: 10240,
  36. minRatio: 0.8,
  37. //删除原始文件只保留压缩后的文件
  38. //deleteOriginalAssets: false
  39. })
  40. )
  41. }
  42. config.resolve.alias = {
  43. '@': path.resolve(__dirname, 'src'),
  44. 'components': '@/components',
  45. 'views': '@/views',
  46. 'assets': '@/assets',
  47. 'utils': '@/utils'
  48. }
  49. },
  50. css: {
  51. loaderOptions: {
  52. less: {
  53. javascriptEnabled: true,
  54. }
  55. }
  56. },
  57. }