You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为eslint-plugin-boundaries编写满足AND条件的Glob模式

解决eslint-plugin-boundaries的路径匹配问题

原有配置的问题

你写的模式是两个路径的逻辑或关系,只要路径匹配其中任意一个就会被选中。src/features/project/index.ts会命中第二个src/features/*/*.ts规则,完全不检查该目录下是否存在ui/model/lib文件夹,所以出现误匹配。

正确配置方案

eslint-plugin-boundaries提供了require选项,可以用来强制要求目标路径所在的目录必须存在指定的文件/目录,刚好能解决你的“同时存在index.ts和指定子目录”的需求。

方案一:合并配置

{
  "pattern": "src/features/*/{index.ts,lib/**,model/**,ui/**}",
  "require": [
    "src/features/*/(lib|model|ui)"
  ]
}
  • pattern:匹配src/features/[任意文件夹]下的index.ts,以及lib/model/ui三个文件夹下的所有文件。
  • require:强制要求对应的features子目录下,必须存在lib/model/ui中的至少一个目录,直接过滤掉只有index.ts的目录。

方案二:拆分更清晰的规则

如果想更明确区分两种路径(index.ts和子目录文件),可以拆成两个规则:

{
  "patterns": [
    {
      "pattern": "src/features/*/index.ts",
      "require": "src/features/*/(lib|model|ui)"
    },
    {
      "pattern": "src/features/*/(lib|model|ui)/**"
    }
  ]
}
  • 第一个规则:仅匹配features子目录下的index.ts,但要求该目录必须有lib/model/ui中的一个。
  • 第二个规则:直接匹配lib/model/ui下的所有文件,这类路径本身就满足“存在指定子目录”的条件,无需额外约束。

为什么不用纯Glob?

纯Glob语法只能匹配路径字符串本身,无法检查目录下是否存在其他文件/目录。比如你没法写一个Glob来表示“某个目录下既有index.ts又有ui文件夹”,因为Glob不具备遍历目录结构做存在性校验的能力,所以用插件自带的require选项是最可靠的方式。

内容的提问来源于stack exchange,提问作者qweezz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:07:38