vue.config.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // vue.config.js
  2. const path = require('path')
  3. const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')
  4. const CompressionPlugin = require('compression-webpack-plugin')// 引入gzip压缩插件
  5. const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin')
  6. function resolve (dir) {
  7. return path.join(__dirname, dir)
  8. }
  9. module.exports = {
  10. publicPath: './',
  11. // 将构建好的文件输出到哪里
  12. outputDir: 'dist-app',
  13. // 放置生成的静态资源(js、css、img、fonts)的目录。
  14. assetsDir: 'assets',
  15. // 指定生成的 index.html 的输出路径
  16. indexPath: 'index.html',
  17. // 是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。
  18. runtimeCompiler: false,
  19. // 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。
  20. transpileDependencies: ['node_modules'],
  21. // 生产环境关闭 source map
  22. productionSourceMap: false,
  23. // lintOnSave: true,
  24. // 配置css
  25. css: {
  26. // 是否使用css分离插件 ExtractTextPlugin
  27. extract: true,
  28. sourceMap: true,
  29. // css预设器配置项
  30. loaderOptions: {
  31. postcss: {
  32. plugins: [
  33. require('postcss-pxtorem')({ // 把px单位换算成rem单位
  34. rootValue: 37.5, // vant官方使用的是37.5
  35. propList: ['*']
  36. })
  37. ]
  38. }
  39. },
  40. // 启用 CSS modules for all css / pre-processor files.
  41. modules: false
  42. },
  43. // 是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。
  44. chainWebpack: config => {
  45. // 配置别名
  46. config.resolve.alias
  47. .set('@', resolve('src'))
  48. .set('assets', resolve('src/assets'))
  49. .set('components', resolve('src/components'))
  50. .set('views', resolve('src/views'))
  51. // config.optimization.minimizer('terser').tap((args) => {
  52. // // 去除生产环境console
  53. // args[0].terserOptions.compress.drop_console = true
  54. // return args
  55. // })
  56. const svgRule = config.module.rule('svg')
  57. svgRule.uses.clear()
  58. svgRule.exclude.add(/node_modules/)
  59. svgRule
  60. .test(/\.svg$/)
  61. .use('svg-sprite-loader')
  62. .loader('svg-sprite-loader')
  63. .options({
  64. symbolId: 'icon-[name]'
  65. })
  66. const imagesRule = config.module.rule('images')
  67. imagesRule.exclude.add(resolve('src/components/icon/svg'))
  68. config.module.rule('images').test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
  69. },
  70. configureWebpack: (config) => {
  71. config.plugins.push(new SkeletonWebpackPlugin({
  72. webpackConfig: {
  73. entry: {
  74. app: path.join(__dirname, './src/common/entry-skeleton.js')
  75. }
  76. },
  77. minimize: true,
  78. quiet: true
  79. }))
  80. if (process.env.NODE_ENV === 'production') {
  81. config.plugins.push(new BundleAnalyzerPlugin())
  82. config.plugins.push(new CompressionPlugin({ // gzip压缩配置
  83. test: /\.js$|\.html$|\.css/, // 匹配文件名
  84. threshold: 10240, // 对超过10kb的数据进行压缩
  85. deleteOriginalAssets: false // 是否删除原文件
  86. }))
  87. }
  88. },
  89. // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
  90. parallel: require('os').cpus().length > 1,
  91. // 向 PWA 插件传递选项。
  92. // https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
  93. pwa: {},
  94. devServer: {
  95. host: '0.0.0.0',
  96. port: 8089, // 端口号
  97. https: false, // https:{type:Boolean}
  98. open: false, // 配置自动启动浏览器 open: 'Google Chrome'-默认启动谷
  99. // 配置多个代理
  100. proxy: {
  101. // '/api': {
  102. // target: 'http://192.168.3.193:8080',
  103. // // ws: true, // 代理的WebSockets
  104. // changeOrigin: true // 允许websockets跨域
  105. // // pathRewrite: {
  106. // // '^/api': 'http://192.168.3.47:8081'
  107. // // }
  108. // },
  109. '/auth/oauth': {
  110. target: 'http://47.109.88.180:8080',
  111. // ws: true, // 代理的WebSockets
  112. changeOrigin: true // 允许websockets跨域
  113. // pathRewrite: {
  114. // '^/api': ''http://10.77.79.57:8080
  115. // }
  116. },
  117. '/apps/niujie-shigong': {
  118. // target: 'http://10.77.79.57:8080',
  119. target: 'http://10.79.32.200:8080',
  120. // ws: true, // 代理的WebSockets/
  121. changeOrigin: true // 允许websockets跨域
  122. // pathRewrite: {
  123. // '^/dev-api': ''
  124. // }
  125. }
  126. }
  127. }
  128. }