javascript - 如何选择具有自定义文件结尾的任意层深度的所有文件夹和子文件夹?

标签 javascript node.js regex create-react-app package.json

我使用 Create-React-App 制作了一个 React 应用程序。我的 React 应用程序的 package.json 中有一个测试脚本,如下所示:

"test": "node -r @babel/register -r @babel/polyfill **/*.test.js | tap-color",

这会像 src/App.test.js 一样捕获并执行 src/ 中的文件,但不会捕获并执行 header.test.js 中的文件。 src/layout/header/header.test.js。如果我添加更多层文件夹会怎样?是否有一个正则表达式可以捕获 src/ 中的所有文件夹及其子文件夹,无论以 .test.js 结尾的文件如何嵌套?

编辑:我发现 this question on StackOverflow 。根据这个答案,你必须写:

"test": "node -r @babel/register -r @babel/polyfill 'src/**/*.test.js' | tap-color",

不幸的是,这对我来说没有任何匹配。我使用的是 Mac。

最佳答案

您提到的问题对于您的案例来说并不是特别有用。我的答案是有效的,因为 Mocha 被设计为将您提供给它的模式传递给 glob library以便解释。所以当你这样做 mocha 'src/app/**/*.tests.js'引号阻止 shell 解释模式,Mocha 得到 src/app/**/*.tests.js作为赋予它的第一个模式,它赋予 glob获取实际运行的文件列表。您的情况至少在一个关键方面有所不同:glob不涉及所以没有什么可以正确解释**

您的第一次尝试与您使用不理解 ** 的 shell 时发生的情况一致。 。它的解释与*完全相同。 。所以 shell 解释 **/*.test.js*/*.test.js ,扩展此模式并将结果传递给 node .

在第二次尝试中,您引用了该模式,但这对您没有帮助,因为 node不进行模式解释。它尝试加载路径src/**/*.test.js处的文件,按字面解释。这不是你想要的。

我不确定与 Windows 的兼容性影响是什么,但您可以替换 'src/**/*.test.js'$(find src -type f -name '*.test.js') 。 (有关详细信息,请参阅 the man page。)在运行时,shell 会将其替换为 find 的结果。命令。

或者为了更加简单并降低平台问题蔓延的风险,您可以使用 babel-tap 像这样:

babel-tap 'src/**/*.test.js' | tap-color

如果您使用babel-tap ,实际上没有必要使用 find因为在内部babel-tap调用使用 glob 的设施库来解释传递给它的文件名。

<小时/>

我关注的是文件模式问题,但即使没有模式问题,我也没有看到您尝试做的事情将如何工作。考虑此命令,并假设文件存在:

node -r @babel/register -r @babel/polyfill src/a.test.js src/b.test.js

这并不是告诉 Node 运行 src/a.test.jssrc/b.test.js 。相反,它告诉 Node “运行脚本src/a.test.js并将参数src/b.test.js传递给它”。我没用过tap非常喜欢,但我不记得它是这样工作的。使用babel-tap就像我上面展示的那样也避免了这里的问题。

关于javascript - 如何选择具有自定义文件结尾的任意层深度的所有文件夹和子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55513249/

相关文章:

javascript - Console.log 显示数组但无法返回

javascript - 具有 1000 万个项目的两个数组的差异 - _.difference 太慢了

javascript - SSE 和 NodeJS Express

javascript - 使用正则表达式获取两个没有空格的空间字符之间的一些字符

javascript - 将 null 分配给 javascript var - 最终为 String

javascript - 为什么 div 没有出现在我右键单击的位置?

javascript - 查找动态生成的参数值,使用http post方法发送登录

javascript - 单击提交按钮将值从一个文本框填充到另一个文本框

Python 提取某些字符串后的数字

c - c程序中如何使用pcre库匹配url