Node.js 全局模式包括所有js,不包括某些结尾

Node.js 全局模式包括所有js,不包括某些结尾,node.js,pattern-matching,mocha.js,glob,node-glob,Node.js,Pattern Matching,Mocha.js,Glob,Node Glob,我想在摩卡咖啡中使用glob。不幸的是,mocha不支持exclude,也不传递glob选项,所以我必须在一个模式中解决这个问题,而不使用glob ignore选项。另一个解决方案是使用mocha.opts,但这与业力不兼容,我不知道为什么。我可以为karma定义一个与karma兼容的opts文件,为node定义一个与node兼容的opts文件,但这会在问题解决后立即中断,因此我正在寻找另一个解决方案 我需要匹配test/***.spec.js并从结果中排除test/***.karma.spec

我想在摩卡咖啡中使用glob。不幸的是,mocha不支持exclude,也不传递glob选项,所以我必须在一个模式中解决这个问题,而不使用glob ignore选项。另一个解决方案是使用mocha.opts,但这与业力不兼容,我不知道为什么。我可以为karma定义一个与karma兼容的opts文件,为node定义一个与node兼容的opts文件,但这会在问题解决后立即中断,因此我正在寻找另一个解决方案


我需要匹配
test/***.spec.js
并从结果中排除
test/***.karma.spec.js
。使用单个glob模式可以实现这一点吗?

我们在这里讨论的是用逻辑运算符表示的
和(“*.spec.js”,而不是(“*.karma.spec.js”)
。我查看了glob文档,它不支持
逻辑运算符

幸运的是,我们可以将此运算符转换为带否定的
:NOT(或(NOT(“*.spec.js”),“*.karma.spec.js”)
。我尝试了
测试/**/!(!(*.spec.js)|*.karma.spec.js))
,但它不起作用。它试图要求一个具有
test/features
路径的模块,该路径是目录的路径,而不是js文件,所以难怪它不管理它。我不知道那是什么样的错误,但它显然不起作用


另一种可能的解决方案是忘记这个
操作符,只对
而不是(“*.karma”).spec.js
使用否定。我用
test/**/试过了!(*.karma).spec.js
,工作正常。

您可以始终使用
摩卡
查找
。例如,以下命令将返回
test/***.spec.js
的列表,并排除
test/***.karma.spec.js

find test -name '*.spec.js' ! -path '*.karma.spec.js'
将其与摩卡咖啡相结合,以实现您想要的:

mocha $(find test -name '*.spec.js' ! -path '*.karma.spec.js')
我尝试了
“test:“mocha--reporter spec\”test/***(.spec.js |!(.node.spec.js))\”,
。它已被解析,但我得到一个错误,无法找到模块
test/features
。这很奇怪,因为该文件夹中没有
.spec.js
或节点模块,只有BDD的
.feature
文件。