`

RuleSet之compiler/issuer

 
阅读更多

 上节说明了参数rule.resource/rule.resourceQuery

 配置值可以是string、regex、funciton、array组合,

 关键在于通过RuleSet.normalizeCondition处理实现

 

 比较完整的格式如下:

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

  

 官网说法:

 When we import './style.css' within app.js, the resource is /path/to/style.css and  the issuer is /path/to/app.js

 

 因为存在MultiCompiler这个类,可以实现多compiler,所以compiler这个属性还是有意义的

 

{
  test: /.css$/,
  oneOf: [
    {
      resourceQuery: /inline/, // foo.css?inline
      use: 'url-loader'
    },
    {
      resourceQuery: /external/, // foo.css?external
      use: 'file-loader'
    }
  ]
}

  在通过主逻辑resource/resource/issuer/compiler判定通过之后,可以认为筛选出了使用的loader,

 此时并没有停止,可以继续进行判定,过滤出更多的使用的loader,

 oneOf表示使用第一个判断通过的loader配置

 这点区别于rules,表示后续所有通过判定的loader都使用

_run(data, rule, result) {
  ..............
  ..............
  if(rule.use) {
	rule.use.forEach((use) => {
		result.push({
			type: "use",
			value: typeof use === "function" ? RuleSet.normalizeUseItemFunction(use, data) : use,
			enforce: rule.enforce
		});
	});
}

  if(rule.rules) {
	for(let i = 0; i < rule.rules.length; i++) {
		this._run(data, rule.rules[i], result);
	}
}

  if(rule.oneOf) {
	for(let i = 0; i < rule.oneOf.length; i++) {
		if(this._run(data, rule.oneOf[i], result))
			break;
	}
  }
}

  

  _run函数是个递归调用,只要你愿意,可以到深渊。。。

 

分享到:
评论

相关推荐

    Redux-Ruleset-crx插件

    Redux-RuleSet的DevTools。 可视化数据流 Redux-RuleSet是可以管理数据流的冗余中间件。 该Chrome扩展可视化您的应用程序中的数据流动。 如果您使用Redux-RuleSET模拟整个数据流,您不仅可以可视化数据流的原因,...

    PMD_ruleset规则配置文件

    PMD_ruleset规则文件,已经最基本的验证进行了导入。在Eclipse导入即可

    ruleset-generator

    当前将其设置为"homepage": "/ruleset-generator/"以满足zgif.org的要求。 从此目录运行: npm run build以在/ build中获取构建工件。 用法 局限性 如果XSD无效,此应用程序将中断; 例如,在中没有Account 。 ...

    checkstyle_ruleset_minimal.xml

    checkstyle_ruleset_minimal.xml

    tk10plus:看起来像德国地形图的渲染样式 1

    tk10plus tk10plus 是一组渲染样式,看起来像德国的“Topographische Karte 1:10.000”(地形图 1:... 在 Maperitive 中:use-ruleset location=/tk10plus/tk10better.mrules as-alias=tk10better 在 Maperitive 中:

    ccalc:科学的计算器,您可以在其中定义新的函数和常量

    如果您在启动时自动希望加载简化规则, /etc/ccalc/ simplification.ruleset复制到/etc/ccalc/ 。 如果要使用另一个文件夹,请调用make INSTALL_PATH=/my/path (不带斜杠)。 如何使用它 ccalc处理输入。 任何不是...

    ruleset规则包

    规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容规则包中的javabean内容

    RuleSet

    RuleSet

    Phant0m ruleset v8002破解版.rar

    Phant0m ruleset v8002 破解版.rar

    cloudflare-block-bad-bot-ruleset:使用Cloudflare防火墙规则阻止恶意爬网程序

    Cloudflare Block Bad Bot Ruleset项目停止并阻止Bad Bot,垃圾邮件引荐Cloudflare Block Bad Bot Ruleset ,广告软件,恶意软件和任何其他类型的不良Internet流量,这些垃圾流量曾经到达您的网站。受启发,并使用...

    tflint-ruleset-codestyle

    下载插件并将其放在~/.tflint.d/plugins/tflint-ruleset-template (或./.tflint.d/plugins/tflint-ruleset-template )中。 使用插件时,请在.tflint.hcl如下配置: plugin " template " { enabled = true } 规则...

    wordpress-modsecurity-ruleset:适用于WordPress的ModSecurity规则集(WPRS)

    您只需要克隆此存储库,然后将其包含在modsecurity.conf中: ...Include wordpress-modsecurity-ruleset/*.conf (可选)您可以按照01_SETUP.conf文件中所述更改默认行为: ...SecAction " phase:1,id:22000000,...

    L-Schemer:Chicken Scheme编写的简单的L系统渲染软件

    该软件建立在基础之上。 建筑L-方案 为了编译L-Schemer,需要在目录中运行csc repl.scm 使用L-Schemer 使用L-Schemer有两种方法,一种可以使用源文件的文件名作为“ repl”的参数。 ./repl filename 一个人也...

    tflint-ruleset-azurerm:实验性

    用于terraform-provider-azurerm的TFLint规则集 适用于Azure的Terraform Provider的TFLint规则集插件(资源管理器)要求TFLint v0.24 + 前往v1.16安装下载插件并将其放在~/.tflint.d/plugins/tflint-ruleset-azurerm...

    tflint-ruleset-aws:TFLint地形提供者-aws的规则集

    下载插件并将其放置在~/.tflint.d/plugins/tflint-ruleset-aws (或./.tflint.d/plugins/tflint-ruleset-aws )中。 使用插件时,请在.tflint.hcl如下配置: plugin " aws " { enabled = true } 有关插件的更多...

    kemitix-checkstyle-ruleset:集合Checkstyle规则集

    kemitix-checkstyle-规则集 提供与Checkstyle一起使用的广泛Checkstyle规则集,以及完整配置的maven-tile。 规则集包括来自核心Checkstyle库和Sevntu-Checkstyle库的检查。 用法 使用规则集的最简单方法是使用maven...

    twigcs-a11y:TwigCS可访问性规则集

    安装composer require --dev nielsdeblaauw/twigcs-a11y 利用vendor/bin/twigcs --ruleset \\NdB\\TwigCSA11Y\\Ruleset 示例输出./tests/test.twigl.2 c.0 : ERROR [A11Y.TabIndex] Invalid 'tabin

    zally-ruleset-example:自定义Zally RuleSet的示例

    Zally RuleSet示例 请注意,这正在进行中!! 例子EgoRule 愚蠢的示例规则,仅坚持要求API描述引用“ Example Corp”。 Gradle ./gradlew build 请注意,当前没有官方的公共Maven存储库来提供依赖项。 本示例使用...

Global site tag (gtag.js) - Google Analytics