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.

112 lines
3.3 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
4 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. minimize: true,
  65. minimizer:[
  66. new CssMinimizerPlugin({
  67. parallel:true
  68. }),
  69. new TerserPlugin({
  70. extractComments: false,
  71. minify: TerserPlugin.uglifyJsMinify,
  72. // `terserOptions` options will be passed to `uglify-js`
  73. // Link to options - https://github.com/mishoo/UglifyJS#minify-options
  74. terserOptions: {},
  75. })
  76. ],
  77. splitChunks: {
  78. chunks: 'all'
  79. },
  80. },
  81. })
  82. if (config.build.productionGzip) {
  83. const CompressionWebpackPlugin = require('compression-webpack-plugin')
  84. webpackConfig.plugins.push(
  85. new CompressionWebpackPlugin({
  86. algorithm: 'gzip',
  87. test: new RegExp(
  88. '\\.(' +
  89. config.build.productionGzipExtensions.join('|') +
  90. ')$'
  91. ),
  92. threshold: 10240,
  93. minRatio: 0.8
  94. })
  95. )
  96. }
  97. if (config.build.bundleAnalyzerReport) {
  98. const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
  99. webpackConfig.plugins.push(new BundleAnalyzerPlugin())
  100. }
  101. module.exports = webpackConfig