除了.spec.js文件外,对于每个.js文件的Node全局匹配模式

65
我正在寻找一个更好的glob模式,用于usemin,我想找到所有的.js文件,但排除.spec.js文件。 我目前有以下解决方案。 <script src="components/**/*(.js|!(*.spec.js|*.scss))"></script> 我目前的解决方案需要我不断添加要排除的文件扩展名,否则它们会被选中,例如.html文件。
我试图只查找.js文件并从中排除.spec.js,但似乎不起作用。
此外,在下面再添加一个!components/**/*.spec.js的脚本也似乎无效。

2
你可以使用通配符来排除那些测试脚本,但更好的方法可能是将它们放在与“components”同级别的单独的“test”目录中。这样它们就可以很容易地从构建过程中排除掉。 - Troy Gizzi
同意 +1,我已经这么做了很多次,但这次我有一个基于组件的文件夹结构,代码和规范放在一起。 - roughcoder
我将 *.spec.js 文件重命名为 *.spec - Heikki
1个回答

165

这个通配符包含所有的 *.js 文件,但不包括 *.spec.js 文件:

components/**/!(*.spec).js

如果我有更多要忽略的文件,比如 *.controller.js*.module.js 等呢?我正在尝试修改你的答案使其工作,但目前还没有成功。 - Justin
17
好的,我来翻译一下:我明白了,这个表达式的意思是选择 components 文件夹及其子文件夹下所有不以 .spec.controller 结尾的 .js 文件。 - Justin
5
它编译成什么?我只是把它想象成了“components/**/*.!(spec).js”,我考虑用正则表达式的方式。为什么星号在方括号中没有被否定? - Lajos
1
从另一篇帖子中我读到,使用'!'进行node-glob否定在版本5中已被弃用,并将在版本6中完全删除:在此处查看帖子 - dandersendev
all *.spec.js but not *.js 的猜测是 components/**/*.spec.js - Heikki
@Lajos 因为这就是 glob 的工作原理? :) https://www.npmjs.com/package/glob#glob-primer - Glenn Mohammad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接