vue.config.package.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * @description: 打包的配置
  3. * @Author: xing.heng
  4. */
  5. const path = require('path')
  6. const { ProvidePlugin } = require('webpack')
  7. const CompressionPlugin = require('compression-webpack-plugin')
  8. const webpack = require('webpack')
  9. function resolve (dir) {
  10. return path.join(__dirname, dir)
  11. }
  12. module.exports = {
  13. lintOnSave: false,
  14. css: {
  15. extract: true
  16. },
  17. configureWebpack: {
  18. externals: {
  19. vuex: 'vuex',
  20. vue: 'vue',
  21. vueRouter: 'vue-router',
  22. '@antv/g2plot': '@antv/g2plot',
  23. '@jiaminghi/data-view': '@jiaminghi/data-view',
  24. axios: 'axios',
  25. echarts: 'echarts',
  26. 'element-ui': 'element-ui',
  27. 'insert-css': 'insert-css',
  28. jquery: 'jquery',
  29. lodash: 'lodash',
  30. moment: 'moment',
  31. qs: 'qs',
  32. sortablejs: 'sortablejs',
  33. 'tiny-sass-compiler': 'tiny-sass-compiler',
  34. 'vue-codemirror': 'vue-codemirror',
  35. 'vue-contextmenujs': 'vue-contextmenujs',
  36. 'vue-draggable-resizable-gorkys': 'vue-draggable-resizable-gorkys',
  37. 'vue-json-editor-fix-cn': 'vue-json-editor-fix-cn',
  38. 'vue-json-viewer': 'vue-json-viewer',
  39. 'vue-quill-editor': 'vue-quill-editor',
  40. 'vue-sketch-ruler': 'vue-sketch-ruler',
  41. vuedraggable: 'vuedraggable',
  42. ztree: 'ztree',
  43. // codemirror 导入但未声明的变量
  44. 'codemirror/lib/codemirror.css': 'codemirror',
  45. 'codemirror/theme/material-darker.css': 'codemirror',
  46. 'codemirror/addon/selection/active-line.js': 'codemirror',
  47. 'codemirror/mode/vue/vue.js': 'codemirror'
  48. },
  49. resolve: {
  50. alias: {
  51. '@': resolve('example'),
  52. 'data-room-ui': resolve('packages')
  53. },
  54. fallback: {
  55. path: false,
  56. fs: false
  57. }
  58. },
  59. plugins: [
  60. new CompressionPlugin({
  61. test: /\.js$|\.html$|\.css$|\.jpg$|\.jpeg$|\.png/, // 需要压缩的文件类型
  62. threshold: 10240, // 归档需要进行压缩的文件大小最小值,10K以上的进行压缩
  63. deleteOriginalAssets: false // 是否删除原文件
  64. }),
  65. new ProvidePlugin({
  66. jQuery: 'jquery',
  67. $: 'jquery',
  68. 'window.jQuery': 'jquery'
  69. }),
  70. new webpack.optimize.LimitChunkCountPlugin({
  71. maxChunks: 1
  72. })
  73. ]
  74. },
  75. chainWebpack: config => {
  76. // set svg-sprite-loader
  77. config.module
  78. .rule('svg')
  79. .exclude.add(resolve('packages/assets/images/bigScreenIcon/svg'))
  80. .add(resolve('packages/Svgs/svg'))
  81. .add(resolve('packages/assets/images/dataSourceIcon/svg'))
  82. .add(resolve('packages/assets/images/pageIcon/svg'))
  83. .add(resolve('packages/assets/images/alignIcon/svg'))
  84. .end()
  85. config.module
  86. .rule('icons')
  87. .test(/\.svg$/)
  88. .include.add(resolve('packages/assets/images/bigScreenIcon/svg'))
  89. .add(resolve('packages/Svgs/svg'))
  90. .add(resolve('packages/assets/images/dataSourceIcon/svg'))
  91. .add(resolve('packages/assets/images/pageIcon/svg'))
  92. .add(resolve('packages/assets/images/alignIcon/svg'))
  93. .end()
  94. .use('svg-sprite-loader')
  95. .loader('svg-sprite-loader')
  96. .options({
  97. symbolId: 'icon-[name]'
  98. })
  99. .end()
  100. const imagesRule = config.module.rule('images')
  101. imagesRule.uses.clear()
  102. config.module
  103. .rule('images')
  104. .set('parser', {
  105. dataUrlCondition: {
  106. maxSize: 1024 * 1024
  107. }
  108. })
  109. .end()
  110. // 处理font
  111. config.module
  112. .rule('font')
  113. .test(/\.(ttf|woff|woff2)$/)
  114. .set('parser', {
  115. dataUrlCondition: {
  116. maxSize: 1024 * 1024
  117. }
  118. })
  119. .end()
  120. }
  121. }