oneOf : 优化loader的配置

因为打包文件的 loader ,都会执行 rules 一边, 就算css执行完loader了,还会往下进行匹配所有的loader, 这样会影响性能 。

通过 oneOf 可以解决

使用 oneOf

oneOf 不能有两个配置处理同一种类型的文件,解决:可以将单独的loader放出来

  1. module.exports = {
  2. module: {
  3. rules: [
  4. // 使用oneOf 包裹处理文件的loader
  5. // 注意: oneOf 不能有两个配置处理同一种类型的文件,解决:可以将单独的loader放出来
  6. // JS 语法检查 eslint airbnb-base
  7. {
  8. test: /\.js$/,
  9. exclude: /node_modules/,
  10. enforce: "pre", // 优先执行
  11. loader: 'eslint-loader',
  12. // 优先执行
  13. options: {
  14. // 自动修复 eslint 的错误
  15. fix: true,
  16. }
  17. }
  18. oneOf: [
  19. {
  20. test: /\.less$/,
  21. use: [
  22. MiniCssExtractPlugin.loader,
  23. 'css-loader',
  24. 'less-loader',
  25. ]
  26. },
  27. {
  28. test: /\.css$/,
  29. use: [
  30. // 'style-loader',
  31. MiniCssExtractPlugin.loader,
  32. 'css-loader'
  33. ]
  34. },
  35. {
  36. test: /\.(jpg|png|gif)$/,
  37. loader: 'url-loader',
  38. options: {
  39. limit: 8 * 1024,
  40. name: '[hash:10].[ext]',
  41. esModule: false,
  42. }
  43. },
  44. {
  45. test: /\.html$/,
  46. loader: 'html-loader'
  47. },
  48. {
  49. exclude: /\.(html|js|css|less|jpg|png|gif)/,
  50. loader: 'media-loader',
  51. options: {
  52. name: '[hash:10].[ext]',
  53. }
  54. },
  55. {
  56. test: /\.js$/,
  57. exclude: /node_modules/,
  58. loader: 'babel-loader',
  59. options: {
  60. presets: ['@babel/preset-env']
  61. }
  62. }
  63. ]
  64. ]
  65. }
  66. }