【Webpack 性能优化系列(3) - oneOf】

科技 科技 1712 人阅读 | 0 人回复

<
webpack系列文章:

oneOf

我们正在写loader的时分,rules里面有十分十分多的loader划定规矩,可是每一个文件只能婚配一个 loader,被一个 loader 处置,因而可使用 oneOf 独一婚配,没有需求每一个文件把一切的 loader 皆讯问一遍,如许能够进步 loader 的施行服从
webpack.config.js写法设置以下:
  1. const { resolve } = require(&#39;path&#39;);
  2. const MiniCssExtractPlugin = require(&#39;mini-css-extract-plugin&#39;);
  3. const OptimizeCssAssetsWebpackPlugin = require(&#39;optimize-css-assets-webpack-plugin&#39;);
  4. const HtmlWebpackPlugin = require(&#39;html-webpack-plugin&#39;);
  5. // 界说nodejs情况变量:决议利用browserslist的哪一个情况
  6. process.env.NODE_ENV = &#39;production&#39;;
  7. // 复用loader
  8. const commonCssLoader = [
  9.   MiniCssExtractPlugin.loader,
  10.   &#39;css-loader&#39;,
  11.   {
  12.     // 借需求正在package.json中界说browserslist
  13.     loader: &#39;postcss-loader&#39;,
  14.     options: {
  15.       ident: &#39;postcss&#39;,
  16.       plugins: () => [require(&#39;postcss-preset-env&#39;)()]
  17.     }
  18.   }
  19. ];
  20. module.exports = {
  21.   entry: &#39;./src/js/index.js&#39;,
  22.   output: {
  23.     filename: &#39;js/built.js&#39;,
  24.     path: resolve(__dirname, &#39;build&#39;)
  25.   },
  26.   module: {
  27.     rules: [
  28.       {
  29.         // 正在package.json中eslintConfig --> airbnb
  30.         test: /\.js$/,
  31.         exclude: /node_modules/,
  32.         // 劣先施行
  33.         enforce: &#39;pre&#39;,//一般的,一个文件只能被一个loader处置,当一个文件要被多个loader处置,
  34.                                    //必然要指定loader施行的前后挨次,先施行eslint再施行babel
  35.         loader: &#39;eslint-loader&#39;,
  36.         options: {
  37.           fix: true
  38.         }
  39.       },
  40.       {
  41.         // 以下loader只会婚配一个
  42.         // 留意:不克不及有两个设置处置统一品种型文件,以是eslint-loader放正在oneOf婚配之前施行
  43.         oneOf: [
  44.           {
  45.             test: /\.css$/,
  46.             use: [...commonCssLoader]
  47.           },
  48.           {
  49.             test: /\.less$/,
  50.             use: [...commonCssLoader, &#39;less-loader&#39;]
  51.           },
  52.           /*
  53.             一般来说,一个文件只能被一个loader处置。
  54.             当一个文件要被多个loader处置,那末必然要指定loader施行的前后挨次:
  55.               先施行eslint 正在施行babel
  56.           */
  57.           {
  58.             test: /\.js$/,
  59.             exclude: /node_modules/,
  60.             loader: &#39;babel-loader&#39;,
  61.             options: {
  62.               presets: [
  63.                 [
  64.                   &#39;@babel/preset-env&#39;,
  65.                   {
  66.                     useBuiltIns: &#39;usage&#39;,
  67.                     corejs: {version: 3},
  68.                     targets: {
  69.                       chrome: &#39;60&#39;,
  70.                       firefox: &#39;50&#39;
  71.                     }
  72.                   }
  73.                 ]
  74.               ]
  75.             }
  76.           },
  77.           {
  78.             test: /\.(jpg|png|gif)/,
  79.             loader: &#39;url-loader&#39;,
  80.             options: {
  81.               limit: 8 * 1024,
  82.               name: &#39;[hash:10].[ext]&#39;,
  83.               outputPath: &#39;imgs&#39;,
  84.               esModule: false
  85.             }
  86.           },
  87.           {
  88.             test: /\.html$/,
  89.             loader: &#39;html-loader&#39;
  90.           },
  91.           {
  92.             exclude: /\.(js|css|less|html|jpg|png|gif)/,
  93.             loader: &#39;file-loader&#39;,
  94.             options: {
  95.               outputPath: &#39;media&#39;
  96.             }
  97.           }
  98.         ]
  99.       }
  100.     ]
  101.   },
  102.   plugins: [
  103.     new MiniCssExtractPlugin({
  104.       filename: &#39;css/built.css&#39;
  105.     }),
  106.     new OptimizeCssAssetsWebpackPlugin(),
  107.     new HtmlWebpackPlugin({
  108.       template: &#39;./src/index.html&#39;,
  109.       minify: {
  110.         collapseWhitespace: true,
  111.         removeComments: true
  112.       }
  113.     })
  114.   ],
  115.   mode: &#39;production&#39;
  116. };
复造代码
参考



  • https://www.bilibili.com/video/BV1e7411j7T5?p=6&spm_id_from=pageDriver
  • https://www.cnblogs.com/cl1998/p/13210438.html
  • https://webpack.docschina.org/configuration/module/#ruleoneof

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则