vue.config.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const path = require('path');
  2. const Timestamp = new Date().getTime();
  3. let title = '';
  4. if (process.env.VUE_APP_NODE_NAME == 'production') {
  5. title = ''
  6. } else if (process.env.VUE_APP_NODE_NAME == 'test') {
  7. title = '(测试)'
  8. } else {
  9. title = '(开发)'
  10. }
  11. const CompressionWebpackPlugin = require("compression-webpack-plugin")
  12. const productionGzipExtensions = ['js', 'css']
  13. const conf = {
  14. pages: {
  15. index: {
  16. entry: 'src/main.js',
  17. template: 'index/business/index.html',
  18. filename: 'index.html',
  19. title: '交建OA' + title,
  20. }
  21. },
  22. outputDir: 'dist',
  23. devServer: {
  24. host: '0.0.0.0',
  25. port: 80,
  26. //解析缓存
  27. disableHostCheck: true,
  28. //支持gzip
  29. compress: true,
  30. },
  31. chainWebpack: (config) => {
  32. config.entry.app = ['babel-polyfill', '../src/main.js']
  33. config.resolve.alias
  34. .set('@', resolve('src'))
  35. config.plugins.delete('preload-index');
  36. config.plugins.delete('prefetch-index');
  37. config.optimization.minimize(true);
  38. //打包分析添加
  39. //config.output.filename('js/[name].[hash].js').end();
  40. //config.plugin('webpack-bundle-analyzer').use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
  41. },
  42. configureWebpack: config => {
  43. //开启gzip压缩,需要配置Nginx服务器gzip选项开启
  44. config.plugins.push(
  45. new CompressionWebpackPlugin({
  46. algorithm: 'gzip', //开启gzip
  47. test: /\.js$|\.html$|.\css/, // 匹配文件名
  48. threshold: 10240, // 对超过10k的数据压缩
  49. deleteOriginalAssets: false // 不删除源文件
  50. })
  51. );
  52. config.output.filename = `./static/js/[name].${Timestamp}.js`
  53. config.output.chunkFilename = `./static/js/[name].${Timestamp}.js`
  54. config.performance = {
  55. hints: 'warning',
  56. //入口起点的最大体积 整数类型(以字节为单位)
  57. maxEntrypointSize: 50000000,
  58. //生成文件的最大体积 整数类型(以字节为单位 300k)
  59. maxAssetSize: 30000000,
  60. //只给出 js 文件的性能提示
  61. assetFilter: function(assetFilename) {
  62. return assetFilename.endsWith('.js');
  63. }
  64. }
  65. },
  66. };
  67. function resolve(dir) {
  68. return path.join(__dirname, dir)
  69. }
  70. module.exports = {
  71. pages: conf.pages,
  72. publicPath: './',
  73. outputDir: conf.outputDir + '_' + process.env.OUT_PUT_NAME,
  74. assetsDir: 'static',
  75. lintOnSave: false,
  76. devServer: conf.devServer,
  77. //不输出map
  78. productionSourceMap: false,
  79. chainWebpack: conf.chainWebpack,
  80. configureWebpack: conf.configureWebpack,
  81. css: {
  82. extract: {
  83. filename: `./static/css/[name].${Timestamp}.css`,
  84. chunkFilename: `./static/css/[name].${Timestamp}.css`
  85. },
  86. sourceMap: false,
  87. loaderOptions: {
  88. // 给 sass-loader 传递选项
  89. sass: {
  90. // @/ 是 src/ 的别名
  91. // prependData: `@import "@/assets/scss/base.scss";`
  92. }
  93. }
  94. }
  95. };