webpack.base.conf.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //webpack.base.conf.js
  2. //'use strict'
  3. const path = require('path');
  4. const HtmlWebpackPlugin = require('html-webpack-plugin');
  5. const HappyPack = require('happypack');
  6. const happyThreadPool = HappyPack.ThreadPool({ size: 3 });
  7. module.exports = {
  8. // 入口起点
  9. entry: {
  10. app: [
  11. path.join(__dirname, '../src/index.js')
  12. ],
  13. vendor: ['react', 'react-dom', 'react-router-dom', 'antd']
  14. },
  15. // 输出
  16. output: {
  17. //publicPath:'./',
  18. path: path.resolve(__dirname, '../dist'),
  19. chunkFilename: '[name].[chunkHash:8].min.js',
  20. filename: "[name].[hash:8].js",
  21. },
  22. // 解析
  23. resolve: {
  24. alias: { //配置绝对路径
  25. 'tools': path.resolve(__dirname, '../src/tools'),
  26. 'store': path.resolve(__dirname, '../src/store'),
  27. 'pages': path.resolve(__dirname, '../src/pages'),
  28. 'assets': path.resolve(__dirname, '../src/assets'),
  29. 'routers': path.resolve(__dirname, '../src/routers'),
  30. 'components': path.resolve(__dirname, '../src/components'),
  31. 'containers': path.resolve(__dirname, '../src/containers'),
  32. },
  33. extensions: ['.js', '.jsx']
  34. },
  35. // loader
  36. module: {
  37. rules: [{
  38. test: /\.js|jsx$/,
  39. exclude: /node_modules/, // 屏蔽不需要处理的文件(文件夹)(可选)
  40. //loader: 'babel-loader'
  41. use: ['happypack/loader?id=babel']
  42. },
  43. {
  44. test: /\.css$/,
  45. //use: ['style-loader', 'css-loader']
  46. use: ['happypack/loader?id=css']
  47. },
  48. {
  49. test: /\.less$/,
  50. //use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
  51. use: ['happypack/loader?id=less']
  52. },
  53. {
  54. test: /\.(jpg|jpeg|png|gif|eot|svg|ttf|woff)/,
  55. exclude: /node_modules/,
  56. use: [{
  57. loader: 'url-loader',
  58. options: {
  59. limit: 8192,
  60. name: 'images/[hash:8].[name].[ext]'
  61. }
  62. }],
  63. }
  64. ]
  65. },
  66. // 插件
  67. plugins: [
  68. new HappyPack({
  69. id: 'less',
  70. loaders: [
  71. 'style-loader',
  72. 'css-loader',
  73. {
  74. loader: 'postcss-loader',
  75. options: { sourceMap: true }
  76. },
  77. 'less-loader'
  78. ],
  79. verbose: true,
  80. threadPool: happyThreadPool
  81. }),
  82. new HappyPack({
  83. id: 'css',
  84. loaders: [
  85. 'style-loader',
  86. 'css-loader'
  87. ],
  88. verbose: true,
  89. threadPool: happyThreadPool
  90. }),
  91. new HappyPack({
  92. id: 'babel',
  93. loaders: [{
  94. loader: 'babel-loader',
  95. options: {
  96. cacheDirectory: true
  97. }
  98. }],
  99. verbose: true,
  100. threadPool: happyThreadPool
  101. }),
  102. new HtmlWebpackPlugin({
  103. filename: 'index.html',
  104. template: path.join(__dirname, '../public/index.html'),
  105. minify: {
  106. collapseWhitespace: true,
  107. collapseInlineTagWhitespace: true,
  108. removeComments: true,
  109. removeRedundantAttributes: true
  110. },
  111. inject: 'body'
  112. })
  113. ]
  114. }