这种模式是如何工作的:'test / e2e / ** / * .spec.js'?

时间:2015-12-31 22:22:31

标签: javascript node.js protractor filepath

我在protractor的配置文件中看到了这种模式。

specs: [
  'test/e2e/**/*.spec.js'
]

表示它意味着“ test / e2e ”中的所有文件。这是什么样的模式?我认为这不是正则表达式,因为那些未转义的斜杠。特别是,为什么**位于中间,而不只是test/e2e/*.spec.js

我尝试使用搜索引擎,但没有找到任何有用的东西可能因为星号在搜索引擎中效果不佳。

3 个答案:

答案 0 :(得分:7)

  

这是什么样的模式?

它被称为" glob"。模块glob是Node的流行实现,似乎是Protractor使用的模块。

  

特别是,为什么会出现" **"在中间,不只是" test / e2e / * .spec.js"?

**表示它可以匹配子目录。它就像子目录的通配符。

例如,test/e2e/*.spec.js匹配test/e2e/example.spec.js,但不匹配test/e2e/subdir/example.spec.js。但是test/e2e/**/*.spec.js与之匹配。

答案 1 :(得分:5)

It is called "glob" syntax。 Glob是一个允许使用一系列通配符指定文件的工具。

  • *.js表示"扩展名为js的文件夹中的所有内容。
  • **表示"后代文件/文件夹。
  • **/*.js表示"后代文件夹中带有js扩展名的后代文件。"
  • test/e2e/**/*.spec.js'表示上述内容,从test/e2e/目录开始。

因此,例如,给定此文件系统:

test/e2e/foo/a.spec.js <-- matches
test/e2e/foo/butter.js <-- does not include "spec.js"
test/e2e/bar/something.spec.js <-- matches
test/other/something-different.spec.js <-- not in /test/e2e

最终模式将匹配:

test/e2e/foo/a.spec.js
test/e2e/bar/something.spec.js

答案 2 :(得分:3)

这是一种全球化的模式。使用globbing模式的大多数javascript事物似乎都基于glob npm包。值得一看文档,因为当你遇到更复杂的情况时,会有一些方便的提示。

您询问的路径将匹配.spec.js

任何子目录中以test/e2e结尾的任何文件