webpack.config.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. const path = require('path')
  2. const webpack = require('webpack')
  3. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  4. const htmlWebpackPlugin = require('html-webpack-plugin')
  5. const { CleanWebpackPlugin } = require('clean-webpack-plugin')
  6. const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
  7. .BundleAnalyzerPlugin
  8. const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
  9. module.exports = {
  10. entry: {
  11. report: './src/report.js'
  12. },
  13. devtool: 'cheap-module-eval-source-map',
  14. devServer: {
  15. open: true,
  16. //开启HMR 功能
  17. hot: true,
  18. //表示就算 HMR 没有生效,也不刷新浏览器
  19. hotOnly: true,
  20. // host: '0.0.0.0'
  21. },
  22. // optimize: {
  23. // concatenateModules: true
  24. // },
  25. module: {
  26. //只是js 和 babel 之间的桥梁,并没有编译的功能
  27. rules: [
  28. {
  29. test: /\.js$/,
  30. exclude: /node_modules/,
  31. use: {
  32. loader: 'babel-loader',
  33. options: {
  34. //presets 预置 针对自己的项目
  35. /**
  36. * ,{
  37. "targets": {
  38. "browsers": ["last 2 versions", "safari >= 7"]
  39. },
  40. modules:false,
  41. useBuiltIns: 'usage',
  42. corejs:2
  43. }
  44. */
  45. presets: [['@babel/preset-env']],
  46. plugins: [['@babel/plugin-transform-runtime']]
  47. }
  48. }
  49. },
  50. {
  51. test: /\.scss$/,
  52. use: [
  53. MiniCssExtractPlugin.loader,
  54. /**
  55. * importLoaders:2
  56. * 如果没有这个选项 则只有在js 中引入的样式文件会走less 和 postcss 两个loader,在样式文件中通过import 引入别的样式文件则不会走less 和 postcss 两个loader
  57. * 加入这个选项是为了无论在哪里引入样式文件都会走下面两个loader
  58. */
  59. {
  60. loader: 'css-loader',
  61. options: {
  62. importLoaders: 2
  63. //css模块化 通过 import style from 'style.css' 然后页面上通过 style.module 的语法实现模块化,可以避免全局样式冲突
  64. //modules: true
  65. }
  66. },
  67. 'sass-loader',
  68. 'postcss-loader'
  69. ]
  70. },
  71. {
  72. test: /\.(jpg|png|jpeg|svg)$/,
  73. use: {
  74. //url-loader非常类似 file-loader 只是多了一个limit 的限制,为了项目优化
  75. loader: 'url-loader',
  76. options: {
  77. limit: 1024 * 10,
  78. outputPath: 'image/'
  79. }
  80. }
  81. }
  82. ]
  83. },
  84. output: {
  85. //针对入口多文件打包占位符非常有用
  86. filename: '[name].js',
  87. path: path.resolve(__dirname, './dist')
  88. },
  89. externals: {
  90. jquery: 'jQuery'
  91. },
  92. plugins: [
  93. new MiniCssExtractPlugin(), //打包后运行 引入的是output里面所有生成的文件
  94. new htmlWebpackPlugin({
  95. template: './src/index.html'
  96. }),
  97. //需要删除的文件夹目录 --- 打包前运行['dist']
  98. new CleanWebpackPlugin(),
  99. //代码分析工具
  100. new BundleAnalyzerPlugin(),
  101. //去除压缩js的时候去除提示信息
  102. new UglifyJsPlugin({
  103. uglifyOptions: {
  104. warnings: false
  105. }
  106. }),
  107. new webpack.optimize.ModuleConcatenationPlugin()
  108. ]
  109. }