webpack.config.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. const { resolve } = require("path");
  2. //提取css
  3. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  4. //压缩css
  5. const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
  6. //js语法检查
  7. const EsLintPlugin = require('eslint-webpack-plugin')
  8. //html资源处理
  9. const HtmlWebpackPlugin = require('html-webpack-plugin')
  10. //设置node环境变量 postcss-loader会根据它读取package.js里的browserslist配置
  11. process.env.NODE_ENV = 'development'
  12. //复用loader
  13. const commonCssLoader = [
  14. MiniCssExtractPlugin.loader, //提取css
  15. 'css-loader',
  16. {
  17. loader: 'postcss-loader', //兼容性处理
  18. options: {
  19. // 旧版本配置
  20. /* ident: 'postcss',
  21. plugins: () => [
  22. require('postcss-preset-env')() //读取package.json里browserslist配置,默认加载根据node_env加载production
  23. ] */
  24. postcssOptions: {
  25. plugins: [
  26. [
  27. 'postcss-preset-env'
  28. ],
  29. ],
  30. }
  31. }
  32. }
  33. ]
  34. module.exports = {
  35. entry: './src/js/index.js',
  36. output: {
  37. filename: 'js/built.js',
  38. path: resolve(__dirname, 'build')
  39. },
  40. module:{
  41. rule:[
  42. {
  43. test:/\.css$/,
  44. use: [
  45. ...commonCssLoader
  46. ]
  47. },
  48. {
  49. test:/\.less$/,
  50. use:[
  51. ...commonCssLoader,
  52. 'less-loader'
  53. ]
  54. },
  55. { //兼容性处理
  56. test:/\.js$/,
  57. exclude: /node_modules/,
  58. loader: 'babel-loader',
  59. options:{
  60. // 预设:指示babel做怎样的兼容性处理
  61. presets:[
  62. [
  63. '@babel/preset-env',
  64. {
  65. useBuiltIns: 'usage',
  66. corejs:{
  67. version:3
  68. },
  69. targets:{
  70. chrome: '60',
  71. firefox: '60',
  72. ie:'9',
  73. safari: '10',
  74. edge: '17'
  75. }
  76. }
  77. ]
  78. ]
  79. }
  80. },
  81. //处理图片
  82. {
  83. test:/\.(jpg|png|jpeg|gif)/,
  84. loader:'url-loader',
  85. options:{
  86. limit:8*1024,
  87. name:'[hash:10].[ext]',
  88. outputPath:'imgs',
  89. esModule: false,
  90. }
  91. },
  92. //html 处理
  93. {
  94. test:/\.html$/,
  95. loader:'html-loader'
  96. },
  97. //其他资源处理
  98. {
  99. exclude:/\.(js|css|less|html|jpg|jpeg|png|gif)/,
  100. loader:'file-loader',
  101. options:{
  102. outputPath:'media',
  103. esModule: false,
  104. name: '[hash:10].[ext]'
  105. },
  106. type: 'javascript/auto'
  107. }
  108. ]
  109. },
  110. plugins:[
  111. new MiniCssExtractPlugin({
  112. filename: 'css/built.css'
  113. }),
  114. new OptimizeCssAssetsWebpackPlugin(),
  115. new EsLintPlugin({
  116. extensions: ['js', 'json', 'coffee'],
  117. //exclude: '/node_modules/',
  118. fix:true
  119. }),
  120. new HtmlWebpackPlugin({
  121. template: './src/index.html',
  122. minify:{
  123. collapseWhitespace:true,
  124. removeComments:true
  125. }
  126. })
  127. ],
  128. mode:'production'
  129. }