5

我正在尝试学习如何将 GulpJS 文件放在一起并在某些地方查看以下源参考 * / .js 但不确定它的确切含义。有人可以解释这是什么吗?

如果我的文件结构如下所示,我将如何访问 * 每个 js 库中的每个 js 文件和 js src 中的每个 js 文件?* 我如何访问每张图片?

css/
    libs/
        lib1.scss
        lib2.scss
    src/
        partials/
            partial1.scss
            partial2.scss
            partial3.scss
js/
    libs/
        lib1/
            lib11.js
        lib2/
            lib21.js
        lib3/
            lib31.js
    src/
        src1.js
        src2.js
        src3.js

img/
    imgs1/
        img11.jpg
        img12.jpg
        img13.png
    imgs2/
        img21.gif
        img22.png
        img23.jpg
4

4 回答 4

15

对模式匹配和 gulp 用于解决这些 glob 匹配的模块有基本的了解会很有帮助,即https://github.com/isaacs/minimatch

全球星**

**您要询问的符号被称为“globstar”。在大多数 unix 模式匹配中,*只能表示一个目录级别:

"a/*/*.js"

a/b/app.js => MATCH
a/b/c/app.js => NO MATCH
a/app.js => NO MATCH

globstar 允许您指定未知数量的中间目录,如下所示:

"a/**/*.js"

a/b/app.js => MATCH
a/b/c/app.js => MATCH
a/app.js => MATCH
a/b/c/d/e/f/g/h/i/j/app.js => MATCH
other/app.js => NO MATCH

否定

您可以使用前缀来否定它们!

["a/**/*.js", "!a/vendor/**/*.js"]

a/b/c/app.js => MATCH
a/vendor/b/backbone.js => NO MATCH

对于从 linting 等中排除供应商文件很有用。

多个球体组合

您还可以将多个 glob 组合到一个数组中,以将多个模式包含在一次搜索中。

["js/**/*.js", "img/**/*.png"]

js/a/b/app.js => MATCH
img/cat.png => MATCH

您请求的 glob 将是这样的:

["js/**/*.js", "img/**/*"]
于 2014-02-18T14:36:41.213 回答
5

“**/*.js”表示“当前目录下所有目录中的所有.js文件,递归”。

传统的“*/*.js”表示“当前目录下所有目录下的所有.js文件”。

于 2014-02-17T17:04:03.700 回答
0

*几乎普遍是通配符 - 可以匹配那个地方的任何东西。

例子:

因此,如果您想同时针对libs目录cssjs目录,您可以编写/*/libs/

于 2014-02-17T16:59:55.273 回答
0

首先……../是“上一个父目录”的命令。所以,如果是../../- 它会上升 2 个目录。

因此../*,同样的说法是,“任何一个父目录向上的文件”。所以,对于你的这个问题,**/*.js- 这与说“从任何上一层的父目录获取任何 .js 文件”的方式相同。

使用通配符时*- 它是递归命令。

于 2014-02-17T17:04:28.380 回答