• webpack优化系列-oneOf


    1. 多个 loader,但是每个文件只能匹配一个 loader,被一个 loader 处理,因此可以使用 oneOf 唯一匹配,不需要每个文件把所有的 loader 都询问一遍,可以提高 loader 的执行效率

    2. webpack.config.js:

    3. const {resolve} = require('path')
      const MiniCssExtractPlugin = require('mini-css-extract-plugin')
      const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
      const HtmlWebpackPlugin = require('html-webpack-plugin')
       
      process.env.NODE_ENV = 'production'
       
      //复用loader
      const commonCssLoader = [
          MiniCssExtractPlugin.loader,
          'css-loader',
          {
              loader:'postcss-loader',
              options:{
                  ident:'postcss',
                  plugins:()=>[require('postcss-preset-env')()]
              }
          }
      ]
       
      module.exports={
          entry:'./src/index.js',
          output:{
              filename:'bundle.js',
              path:resolve(__dirname,'build')
          },
          module:{
              rules:[
                  {
                      test: /.js$/,
                      exclude: /node_modules/,
                      enforce: 'pre', //优先执行,正常的,一个文件只能被一个loader处理,当一个文件要被多个loader处理,
                                      //一定要指定loader执行的先后顺序,先执行eslint再执行babel
                      loader: 'eslint-loader',
                      options: {
                          fix: true
                      }
                  },
                  //以下loader中只会匹配一个,注意不能有两个loader处理同一种类型文件,所以eslint-loader放在oneOf匹配之前执行
                  {
                      oneOf:[
                          {
                              test: /.css$/,
                              use: [...commonCssLoader]
                          },
                          {
                              test: /.less$/,
                              use: [...commonCssLoader]
                          },
                          {
                              test: /.js$/,
                              exclude: /node_modules/,
                              loader: 'babel-loader',
                              options: {
                                  presets: [
                                      ['@babel/preset-env', {
                                          useBuiltIns: 'usage',
                                          corejs: { version: 3 },
                                          targets: {
                                              chrome: '60',
                                              firefox: '50'
                                          }
                                      }]
                                  ]
                              }
                          },
                          {
                              test: /.(jpg|png|gif)$/,
                              loader: 'url-loader',
                              options: {
                                  limit: 8 * 1024,
                                  name: '[hash:10].[ext]',
                                  outputPath: 'imgs',
                                  esModule: false
                              }
                          },
                          {
                              test: /.html$/,
                              loader: 'html-loader'
                          },
                          {
                              exclude: /.(js|css|less|html|jpg|png|gif)$/,
                              loader: 'file-loader',
                              options: {
                                  outputPath: 'media'
                              }
                          }
                      ]
                  }
              ]
          },
          plugins:[
              new MiniCssExtractPlugin({
                  filename:'bundle.css'
              }),
              new OptimizeCssAssetsWebpackPlugin(),
              new HtmlWebpackPlugin({
                  template:'./src/index.html',
                  minify:{
                      collapseWhitespace:true,
                      removeComments:true
                  }
              })
          ],
          mode:'production'
  • 相关阅读:
    显示器接口
    常用英语-持续更新
    Web Service
    单元测试--Moq
    单元测试--Xunit
    Asp.Net WebApi 跨域问题
    VS中常用的快捷键
    单元测试--最佳实践
    设计模式--建造者模式
    windows10搭建GitBucket服务器(1)
  • 原文地址:https://www.cnblogs.com/cl1998/p/13210438.html
Copyright © 2020-2023  润新知