Glob / minimatch:如何使用gulp.src()选择所有内容,然后排除文件夹但保留其中一个文件

31

我有一个类似这样的项目:

root
  |-incl1
  |-incl2
  |- ...
  |-excl1
  |-excl2
     |- .gitignore  <-- keep this one
     |- (other files)  <-- exclude them

我需要编写 gulp.src(),它将包括除excl1excl2之外的所有文件夹但是保留.gitignore文件。

这是我的代码,但它不能正常工作:

gulp.src([
  baseDir + '/**',
  '!' + baseDir + '/{excl1, excl1/**}'
  '!' + baseDir + '/excl2/{**, !.gitignore}'  // <-- doesn't work
], {dot: true})

1
谁发明了globstar风格的语法就该下地狱。说真的。 - Álvaro González
1个回答

73
这似乎有效:
gulp.src([
    baseDir + '/**',                              // Include all
    '!' + baseDir + '/excl1{,/**}',               // Exclude excl1 dir
    '!' + baseDir + '/excl2/**/!(.gitignore)',    // Exclude excl2 dir, except .gitignore
], { dot: true });

从glob匹配中排除单个文件很棘手,因为在minimatch文档中没有类似的示例。

https://github.com/isaacs/minimatch

如果模式以 ! 字符开头,则表示否定。

不完美。现在所有在excl2下的.gitignore文件都被保留了。 - Heikki
那对我来说不是什么大问题。谢谢,我会尝试的。 - Borek Bernard
可以工作。甚至不需要花括号。 - Borek Bernard

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