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

Bor*_*ard 31 glob node.js minimatch gulp

我有一个这样的项目:

root
  |-incl1
  |-incl2
  |- ...
  |-excl1
  |-excl2
     |- .gitignore  <-- keep this one
     |- (other files)  <-- exclude them
Run Code Online (Sandbox Code Playgroud)

我需要编写gulp.src()包含所有文件夹的文件excl1,excl2 保留.gitignore文件.

这是我的代码不起作用:

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

Hei*_*kki 73

这似乎有效:

gulp.src([
    baseDir + '/**',                              // Include all
    '!' + baseDir + '/excl1{,/**}',               // Exclude excl1 dir
    '!' + baseDir + '/excl2/**/!(.gitignore)',    // Exclude excl2 dir, except .gitignore
], { dot: true });
Run Code Online (Sandbox Code Playgroud)

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

https://github.com/isaacs/minimatch

"如果模式以!字符开头,那么它就会被否定".