webpack.prod.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const webpack = require('webpack')
  2. const merge = require('webpack-merge')
  3. const path = require('path')
  4. const CleanWebpackPlugin = require('clean-webpack-plugin')
  5. const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
  6. const ExtractTextPlugin = require('extract-text-webpack-plugin')
  7. const OfflinePlugin = require('offline-plugin')
  8. const DuplicatePackageCheckerPlugin = require('duplicate-package-checker-webpack-plugin')
  9. const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin')
  10. const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
  11. const common = require('./webpack.common.js')
  12. module.exports = merge(common, {
  13. module: {
  14. rules: []
  15. },
  16. plugins: [
  17. new SimpleProgressWebpackPlugin({
  18. format: 'expanded'
  19. }),
  20. new CleanWebpackPlugin([
  21. 'assets/js/*.*',
  22. 'assets/css/*.*',
  23. 'assets/*.js',
  24. 'assets/*.json'
  25. ], {
  26. root: process.cwd(),
  27. verbose: false
  28. }),
  29. new UglifyJSPlugin({
  30. cache: path.join(process.cwd(), '.webpack-cache/uglify'),
  31. parallel: true
  32. }),
  33. new webpack.DefinePlugin({
  34. 'process.env.NODE_ENV': JSON.stringify('production')
  35. }),
  36. new ExtractTextPlugin({
  37. filename: 'css/bundle.css',
  38. allChunks: true
  39. }),
  40. new OptimizeCssAssetsPlugin({
  41. cssProcessorOptions: { discardComments: { removeAll: true } },
  42. canPrint: true
  43. }),
  44. new OfflinePlugin({
  45. publicPath: '/',
  46. externals: ['/'],
  47. caches: {
  48. main: [
  49. 'js/runtime.js',
  50. 'js/vendor.js',
  51. 'js/client.js'
  52. ],
  53. additional: [
  54. ':externals:'
  55. ],
  56. optional: [
  57. 'js/*.chunk.js'
  58. ]
  59. },
  60. safeToUseOptionalCaches: true
  61. }),
  62. new DuplicatePackageCheckerPlugin(),
  63. // Disable Extract Text Plugin stats:
  64. {
  65. apply(compiler) {
  66. compiler.plugin('done', stats => {
  67. if (Array.isArray(stats.compilation.children)) {
  68. stats.compilation.children = stats.compilation.children.filter(child => {
  69. return child.name.indexOf('extract-text-webpack-plugin') !== 0
  70. })
  71. }
  72. })
  73. }
  74. }
  75. ]
  76. })