javascript - 如何选择具有自定义文件结尾的任何层的所有文件夹和子文件夹?
问题描述
我使用 Create-React-App 制作了一个 React 应用程序。我的 React 应用程序中有一个测试脚本,package.json
如下所示:
"test": "node -r @babel/register -r @babel/polyfill **/*.test.js | tap-color",
这会捕获并执行src/
like中的文件src/App.test.js
,而不是. 如果我添加更多层文件夹怎么办?是否有一个正则表达式可以捕获其中的所有文件夹及其子文件夹,无论文件结尾如何嵌套?header.test.js
src/layout/header/header.test.js
src/
.test.js
编辑:我在 StackOverflow 上发现了这个问题。根据那个答案,你必须写:
"test": "node -r @babel/register -r @babel/polyfill 'src/**/*.test.js' | tap-color",
不幸的是,这对我来说什么都不匹配。我在 Mac 上。
解决方案
您提到的问题对您的情况不是特别有用。我在那里的回答很有效,因为 Mocha 的设计目的是将您提供给它的模式传递给glob
库进行解释。因此,当您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')
. (有关详细信息,请参阅页面man
。)在运行时,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.js
和src/b.test.js
. 相反,它告诉节点“运行脚本src/a.test.js
并将参数传递给它src/b.test.js
”。我用tap
的不多,但我不记得它是这样工作的。像我上面显示的那样使用babel-tap
也可以避免这里的问题。
推荐阅读
- versionone - 如何使用 API 在 VersionOne 中检索成员在 TeamRoom 中的参与历史?
- node.js - 尝试通过套接字发送数据时如何识别用户
- c - 互斥锁内的信号量等待
- python - 从 getattr() 获取内存位置
- javascript - Jquery 在从 Webpack 注入后无法在 React 应用程序中全局运行
- python - 无法为 Google 助理生成凭据
- amazon-sqs - 如何找出具有特定 groupId 的所有消息已从 SQS 中的队列中读取?
- c# - NLog 使用日志文件保存二进制数据(特别是图像)
- r - hadoop 流在 RHadoop 中失败,错误代码为 1
- python - 错误:尽管有“if ... is not None”语句,但“NoneType”对象没有属性“split”