webpack.prod.conf.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //webpack.prod.conf.js
  2. //'use strict'
  3. const merge = require('webpack-merge');
  4. const baseWebpackConfig = require('./webpack.base.conf');
  5. const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin');
  6. const path = require('path');
  7. const webpack = require('webpack');
  8. module.exports = merge(baseWebpackConfig, {
  9. // 模式
  10. mode: "production",
  11. // 调试工具
  12. //devtool: '#source-map',
  13. // 输出
  14. output: {
  15. //publicPath:'./',
  16. path: path.resolve(__dirname, '../dist'),
  17. chunkFilename: '[name].[chunkHash:8].min.js',
  18. filename: "[name].[hash:8].js",
  19. },
  20. // 插件
  21. plugins: [
  22. new webpack.HashedModuleIdsPlugin(),
  23. new ParallelUglifyPlugin({
  24. cacheDir: '.uglify-cache',
  25. warnings: false,
  26. include: /..\/dist/,
  27. parallel: true,
  28. ecma: 8,
  29. sourceMap: false,
  30. uglifyJS: {
  31. output: {
  32. beautify: false, // 最紧凑的输出
  33. comments: false, // 删除所有的注释
  34. },
  35. compress: {
  36. drop_console: true, // 删除所有的 `console` 语句,可以兼容ie浏览器
  37. collapse_vars: true, // 内嵌定义了但是只用到一次的变量
  38. reduce_vars: true, // 提取出出现多次但是没有定义成变量去引用的静态值
  39. }
  40. }
  41. })
  42. ],
  43. // 代码分离相关
  44. optimization: {
  45. nodeEnv: 'production',
  46. runtimeChunk: {
  47. name: 'manifest'
  48. },
  49. splitChunks: {
  50. minSize: 30000,
  51. minChunks: 1,
  52. maxAsyncRequests: 5,
  53. maxInitialRequests: 3,
  54. name: false,
  55. cacheGroups: {
  56. vendor: {
  57. test: /[\\/]node_modules[\\/]/,
  58. name: 'vendor',
  59. chunks: 'initial',
  60. }
  61. }
  62. }
  63. }
  64. });