RuleSet之resource/resourceQuery

 RuleSet解析webpack.config.js设定的一系列配置约束(module.rules部分),

 结合import(resourcePath)/require(resourcePath)引入的资源,

 计算resourcePath和配置规则的匹配结果

 直白的说,可以认为这个过程是筛选使用哪些loader去加载处理资源的过程

 

 webpack源码RuleSet看到condition部分,总结一下

 https://webpack.js.org/configuration/module/#rule-resource

 

一般大众化配置格式:

module: {
  rules: [{
    test: /\.js$/,
    use: ['babel-loader],
    exclude: [],
    include: []
  }]
}

 没想到test、exclude、include是resource的简写,变换如下:

module: {
  rules: [{
    use: ['babel-loader],
    resource: {
      test: /\.js$/,
      exclude: [],
      include: []
    }
  }]
}

 需要说明使用了resource,不可以同时配置test、include、exclude属性

 

 使用resource方式配置,还有or、and、not属性可以配置,完整的如下

module: {
  rules: [{
    use: ['babel-loader],
    resource: {
      test: /\.js$/,
      exclude: [],
      include: [],
      not: [],
      and: [],
      or: []
    }
  }]
}

 注意:无论是resource,还是其下的exclude、include、not、or、and,

 其值可以为function、string(字符串开头判定)、regex、array(funciton string, regex组合)

 

 与resource并列的,还有个resoureceQuery参数,

 其值参照resource参数配置,用来测试通过import/require引入的模块参数是否符合要求,比如

{
  test: /.css$/,
  resourceQuery: /inline/,
  use: 'url-loader'
}

 

 可以匹配:

 

import Foo from './foo.css?inline'

 

 RuleSet.normalizeCondition这个方法是实现and or exclude include not的关键,逻辑与的关系

  

 比如resource配置代码,解析为:

 符合js结尾的文件,并且满足在exclude指定的目录中,同时不在include指定的目录中,才使用babel-loader

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值