vue.config.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. const path = require('path');
  2. const resolve = (dir) => path.join(__dirname, dir);
  3. const CompressionPlugin = require('compression-webpack-plugin');
  4. const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  5. const obfuscator = require('./obfuscator');
  6. const obfuscatorFiles = require('./obfuscatorFiles');
  7. const webpack = require('webpack');
  8. const nodeEnv = process.env.NODE_ENV;
  9. const outputDir = 'admin';
  10. module.exports = {
  11. outputDir: outputDir,
  12. productionSourceMap: false,
  13. parallel: false,
  14. publicPath: '/admin/',
  15. assetsDir: 'public',
  16. chainWebpack: (config) => {
  17. // 兼容浏览器
  18. config.entry('main').add('babel-polyfill');
  19. // 配置路径别名
  20. config.resolve.alias
  21. .set('@', resolve('src'))
  22. .set('@api', resolve('src/api'))
  23. .set('@assets', resolve('src/assets'))
  24. .set('@comp', resolve('src/components'))
  25. .set('@views', resolve('src/views'))
  26. .set('@utils', resolve('src/utils'));
  27. if (nodeEnv !== 'development') {
  28. config.plugin('compressionPlugin').use(
  29. new CompressionPlugin({
  30. test: /\.js$|\.html$|\.css$|\.svg$/, // 匹配文件名
  31. threshold: 102400, // 对超过100k的数据压缩
  32. deleteOriginalAssets: false // 不删除源文件
  33. })
  34. );
  35. // config.plugin('fileManagerPlugin').use(
  36. // new FileManagerPlugin({
  37. // events: {
  38. // onEnd: {
  39. // copy: [
  40. // {
  41. // source: `./${outputDir}/admin/public`,
  42. // destination: `./${outputDir}/public`
  43. // }
  44. // ]
  45. // }
  46. // }
  47. // })
  48. // );
  49. }
  50. if (nodeEnv === 'production') {
  51. // 执行混淆器方法生成混淆文件
  52. obfuscator();
  53. // 遍历需要混淆的文件列表
  54. obfuscatorFiles().forEach((item) => {
  55. // 将需要混淆的源文件更换为混淆后的新文件
  56. config
  57. .plugin(item.obfuscatorIndex)
  58. .use(new webpack.NormalModuleReplacementPlugin(new RegExp(item.resourceRegExp), item.newResource));
  59. });
  60. config.plugin('uglifyJs').use(
  61. new UglifyJsPlugin({
  62. uglifyOptions: {
  63. output: {
  64. comments: false
  65. },
  66. // 生产环境自动删除console
  67. compress: {
  68. pure_funcs: ['console.log']
  69. }
  70. },
  71. sourceMap: false,
  72. parallel: true
  73. })
  74. );
  75. }
  76. },
  77. pluginOptions: {
  78. 'style-resources-loader': {
  79. preProcessor: 'less',
  80. patterns: [path.resolve(__dirname, './src/style/variable.less')] // 引入全局样式变量
  81. }
  82. },
  83. // 反向代理
  84. devServer: {
  85. // 环境配置
  86. open: nodeEnv === 'development',
  87. port: 7999,
  88. proxy: {
  89. '/dgapi': {
  90. target: process.env.VUE_APP_BASE_API,
  91. changeOrigin: true,
  92. pathRewrite: {
  93. '^/dgapi': '/'
  94. }
  95. }
  96. }
  97. }
  98. };