vue.config.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. const UglifyJsPlugin = require('uglify-es-webpack-plugin')
  2. const VueFilenameInjector = require('./tools/vue-filename-injector')
  3. // 拼接路径
  4. const resolve = dir => require('path').join(__dirname, dir)
  5. // 增加环境变量
  6. process.env.VUE_APP_VERSION = require('./package.json').version
  7. process.env.VUE_APP_BUILD_TIME = require('dayjs')().format('YYYY-M-D HH:mm:ss')
  8. // 基础路径 注意发布之前要先修改这里
  9. let publicPath = '/'
  10. // 基础路径 打包时使用
  11. // let publicPath = './'
  12. module.exports = {
  13. publicPath, // 根据你的实际情况更改这里
  14. lintOnSave: true,
  15. devServer: {
  16. publicPath // 和 publicPath 保持一致
  17. },
  18. css: {
  19. loaderOptions: {
  20. // 设置 scss 公用变量文件
  21. sass: {
  22. data: `@import '~@/assets/style/public.scss';`
  23. }
  24. }
  25. },
  26. // 默认设置: https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-service/lib/config/base.js
  27. chainWebpack: config => {
  28. /**
  29. * 删除懒加载模块的 prefetch preload,降低带宽压力
  30. * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch
  31. * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#preload
  32. * 而且预渲染时生成的 prefetch 标签是 modern 版本的,低版本浏览器是不需要的
  33. */
  34. config.plugins
  35. .delete('prefetch')
  36. .delete('preload')
  37. // 解决 cli3 热更新失效 https://github.com/vuejs/vue-cli/issues/1559
  38. config.resolve
  39. .symlinks(true)
  40. config
  41. // 开发环境
  42. .when(process.env.NODE_ENV === 'development',
  43. // sourcemap不包含列信息
  44. config => config.devtool('cheap-source-map')
  45. )
  46. // TRAVIS 构建 vue-loader 添加 filename
  47. .when(
  48. process.env.VUE_APP_BUILD_MODE === 'TRAVIS' ||
  49. process.env.NODE_ENV === 'development',
  50. VueFilenameInjector(config, {
  51. propName: process.env.VUE_APP_SOURCE_VIEWER_PROP_NAME
  52. })
  53. )
  54. // 非开发环境
  55. .when(process.env.NODE_ENV === 'development', config => {
  56. config.optimization
  57. .minimizer([
  58. new UglifyJsPlugin({
  59. uglifyOptions: {
  60. // 移除 console
  61. // 其它优化选项 https://segmentfault.com/a/1190000010874406
  62. compress: {
  63. drop_console: true,
  64. drop_debugger: true,
  65. pure_funcs: ['console.log']
  66. }
  67. }
  68. })
  69. ])
  70. })
  71. // i18n
  72. config.module
  73. .rule('i18n')
  74. .resourceQuery(/blockType=i18n/)
  75. .use('i18n')
  76. .loader('@kazupon/vue-i18n-loader')
  77. .end()
  78. // svg
  79. const svgRule = config.module.rule('svg')
  80. svgRule.uses.clear()
  81. svgRule
  82. .include
  83. .add(resolve('src/assets/svg-icons/icons'))
  84. .end()
  85. .use('svg-sprite-loader')
  86. .loader('svg-sprite-loader')
  87. .options({
  88. symbolId: 'd2-[name]'
  89. })
  90. .end()
  91. // image exclude
  92. const imagesRule = config.module.rule('images')
  93. imagesRule
  94. .test(/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/)
  95. .exclude
  96. .add(resolve('src/assets/svg-icons/icons'))
  97. .end()
  98. // 重新设置 alias
  99. config.resolve.alias
  100. .set('@api', resolve('src/api'))
  101. // 判断环境加入模拟数据
  102. // const entry = config.entry('app')
  103. // if (process.env.VUE_APP_BUILD_MODE !== 'nomock') {
  104. // entry
  105. // .add('@/mock')
  106. // .end()
  107. // }
  108. }
  109. }