vue.config.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. const path = require('path')
  2. const resolve = dir => {
  3. return path.join(__dirname, dir)
  4. }
  5. /* const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
  6. .BundleAnalyzerPlugin */
  7. /* const compressionPlugin = require("compression-webpack-plugin"); */
  8. // 注册页面和协议页面在商家端和平台的都独立打包
  9. const pages = {}
  10. if (process.env.VUE_APP_MODE === 'call') {
  11. Object.assign(pages, {
  12. index: {
  13. entry: 'src/pages/call/main.js',
  14. template: 'public/call.html',
  15. filename: 'index.html',
  16. title: process.env.VUE_APP_TITLE,
  17. chunks: ['chunk-vendors', 'chunk-common', 'iview-area', 'index']
  18. }
  19. })
  20. }
  21. if (process.env.VUE_APP_MODE === 'platform') {
  22. Object.assign(pages, {
  23. index: {
  24. entry: 'src/pages/platform/main.js',
  25. template: 'public/index.html',
  26. filename: 'index.html',
  27. title: process.env.VUE_APP_TITLE,
  28. chunks: ['chunk-vendors', 'chunk-common', 'iview-area', 'index']
  29. }
  30. })
  31. }
  32. module.exports = {
  33. pages,
  34. lintOnSave: false,
  35. devServer: {
  36. hot: true
  37. },
  38. chainWebpack: config => {
  39. /* console.log(config, 'chainWebpack') */
  40. // 移除 prefetch 插件
  41. config.plugins.delete('prefetch-index')
  42. // 移除 preload 插件
  43. config.plugins.delete('preload-index')
  44. config.resolve.symlinks(true)
  45. config.resolve.alias
  46. .set('@', resolve('src'))
  47. .set('_c', resolve('src/components'))
  48. .set('_m', resolve('src/mixins'))
  49. .set('_a', resolve('src/assets'))
  50. .set('_s', resolve('src/style'))
  51. .set('_p', resolve('src/pages'))
  52. .set('_call', resolve('src/pages/call'))
  53. .set('_platform', resolve('src/pages/platform'))
  54. },
  55. configureWebpack: (config) => {
  56. if (process.env.NODE_ENV === 'production') {
  57. // 取消console打印
  58. config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
  59. // 打包文件大小配置
  60. config.performance = {
  61. maxEntrypointSize: 10000000,
  62. maxAssetSize: 30000000
  63. }
  64. return {
  65. plugins: [],
  66. externals: {
  67. vue: 'Vue',
  68. 'view-design': 'iview',
  69. 'vue-router': 'VueRouter',
  70. iview: 'ViewUI',
  71. vuex: 'Vuex'
  72. }
  73. }
  74. } else {
  75. return {
  76. optimization: {
  77. splitChunks: {
  78. chunks: 'all',
  79. cacheGroups: {
  80. vendors: {
  81. name: `chunk-vendors`,
  82. test: /[\\/]node_modules[\\/]/,
  83. priority: -10,
  84. chunks: 'all'
  85. },
  86. common: {
  87. name: `chunk-common`,
  88. minChunks: 1,
  89. priority: -20,
  90. minSize: 1,
  91. chunks: 'all',
  92. reuseExistingChunk: true
  93. }
  94. }
  95. }
  96. },
  97. externals: {
  98. //排除一些引入的模块,不进行打包
  99. vue: 'Vue',
  100. 'view-design': 'iview',
  101. 'vue-router': 'VueRouter',
  102. iview: 'ViewUI',
  103. vuex: 'Vuex'
  104. }
  105. }
  106. }
  107. },
  108. css: {
  109. extract: process.env.NODE_ENV === 'production' ? {
  110. ignoreOrder: true,
  111. } : false
  112. },
  113. // 测试环境下打包sourceMap
  114. productionSourceMap: false
  115. }