You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.4 KiB

5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
  1. 'use strict'
  2. const path = require('path')
  3. const utils = require('./utils')
  4. const webpack = require('webpack')
  5. const config = require('../config')
  6. const merge = require('webpack-merge')
  7. const baseWebpackConfig = require('./webpack.base.conf')
  8. const CopyWebpackPlugin = require('copy-webpack-plugin')
  9. const HtmlWebpackPlugin = require('html-webpack-plugin')
  10. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  11. const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
  12. const TerserPlugin = require("terser-webpack-plugin");
  13. const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
  14. function resolve (dir) {
  15. return path.join(__dirname, '..', dir)
  16. }
  17. const env = require('../config/'+process.env.ENV_CONFIG+'.env')
  18. const webpackConfig = merge(baseWebpackConfig, {
  19. mode:'production',
  20. devtool: config.build.productionSourceMap ? config.build.devtool : false,
  21. plugins: [
  22. // http://vuejs.github.io/vue-loader/en/workflow/production.html
  23. new webpack.DefinePlugin({
  24. 'process.env': env
  25. }),
  26. // generate dist index.html with correct asset hash for caching.
  27. // you can customize output by editing /index.html
  28. // see https://github.com/ampedandwired/html-webpack-plugin
  29. new HtmlWebpackPlugin({
  30. filename: config.build.index,
  31. template: 'index.html',
  32. inject: true,
  33. favicon: resolve('favicon.ico'),
  34. title: 'vue-element-admin',
  35. path: config.build.assetsPublicPath + config.build.assetsSubDirectory,
  36. minify: {
  37. removeComments: true,
  38. collapseWhitespace: true,
  39. removeAttributeQuotes: true
  40. // more options:
  41. // https://github.com/kangax/html-minifier#options-quick-reference
  42. },
  43. chunksSortMode: 'auto'
  44. }),
  45. // enable scope hoisting
  46. new webpack.optimize.ModuleConcatenationPlugin(),
  47. new MiniCssExtractPlugin({
  48. filename: "css/[name].[contenthash].css",
  49. chunkFilename: "css/[id].[contenthash].css",
  50. }),
  51. // copy custom static assets
  52. new CopyWebpackPlugin({
  53. patterns: [
  54. {
  55. from: path.resolve(__dirname, '../static'), to: config.build.assetsSubDirectory
  56. }
  57. ],
  58. }),
  59. new FriendlyErrorsPlugin({
  60. onErrors: utils.createNotifierCallback()
  61. }),
  62. ],
  63. optimization: {
  64. moduleIds:'hashed',
  65. minimize: true,
  66. minimizer:[
  67. new CssMinimizerPlugin({
  68. parallel:true
  69. }),
  70. new TerserPlugin({
  71. extractComments: false,
  72. minify: TerserPlugin.uglifyJsMinify,
  73. // `terserOptions` options will be passed to `uglify-js`
  74. // Link to options - https://github.com/mishoo/UglifyJS#minify-options
  75. terserOptions: {},
  76. })
  77. ],
  78. splitChunks: {
  79. chunks: 'all',
  80. minSize: {
  81. javascript: 80000,
  82. webassembly: 80000,
  83. },
  84. },
  85. },
  86. })
  87. if (config.build.productionGzip) {
  88. const CompressionWebpackPlugin = require('compression-webpack-plugin')
  89. webpackConfig.plugins.push(
  90. new CompressionWebpackPlugin({
  91. algorithm: 'gzip',
  92. test: new RegExp(
  93. '\\.(' +
  94. config.build.productionGzipExtensions.join('|') +
  95. ')$'
  96. ),
  97. threshold: 10240,
  98. minRatio: 0.8
  99. })
  100. )
  101. }
  102. if (config.build.bundleAnalyzerReport) {
  103. const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
  104. webpackConfig.plugins.push(new BundleAnalyzerPlugin())
  105. }
  106. module.exports = webpackConfig