在nodejs中复制精确的.gitignore样式解析

vin*_*ent 6 javascript wildcard filepath

我正在尝试确定针对我们拥有的几个不同用例使用哪个匹配器。最重要的是,我们想要复制 gitignore 解析器的行为。

我们正在考虑使用globby fast-globnode-glob。但它们似乎都具有 .gitignore 默认解析不提供的扩展功能。

即,globy 使用 fast-glob,而 fast-glob 使用 micromatch,它公开了自定义功能。并且 node-glob 似乎也扩展了默认语法。因此我开始调查链条的下游。

我有点困惑为什么有这么多的软件包似乎都在做相同/非常相似的事情。

观察/问题:

  1. 它们似乎都以一种或另一种方式进行文件路径通配符匹配(预计任何匹配可能更通用)
  2. Minimatch 显然比 Micromatch 慢,但具有相同/相似的功能?
  3. 多重匹配似乎是迷你匹配的简单包装,允许多种模式。不确定这是否以任何方式优化。
  4. Anymatch 似乎很通用。好像不知道文件路径匹配?
  5. Picomatch“完全支持标准和扩展的 Bash glob 功能”。我认为这与 gitignore 处理密切匹配?
  6. Nanomatch 似乎扩展了 Picomatch 的功能。这比 gitignore 处理器提供的功能更多吗?
  7. Micromatch 似乎扩展了 Nanomatch 的功能,并且似乎是 Minimatch 的替代品?它声称是“直接”替代品,但从它们公开的功能来看,情况似乎并非如此?
  8. Anymatch、Picomatch、Nanomatch 和 Micromatch 均在 github 组织 Micromatch 下发布(有人命名混乱吗?)
  9. “Micromatch 组织”套件似乎没有与 Multimatch 相当的东西?还是我只是没找到?

要回答的第一个问题是标准 git 实际使用什么来处理它的 gitignore。然后找出哪个包最匹配。

jon*_*ert 2

从我记事起,这个库比较就一直在 picomatch 上。它回答了您的所有问题,甚至更多(全面披露:我是 picomatch 的作者)。

我有点困惑为什么有这么多的软件包似乎都在做相同/非常相似的事情。

可以理解。在阅读了有关这些库的广泛自述文件的更多信息后,您的困惑应该会消除。每个图书馆都非常详细地解决您的问题。