除了内部的其他两个子目录外,哪个globbing模式将排除子目录?

时间:2017-03-13 22:48:49

标签: jquery-ui gulp gruntjs glob

我正在从bower复制jQueryUI库。我只想从他们的"主题"中复制两个主题。目录。我想保留的主题文件夹是" base"和" ui-lightness"。

如何通过globbing模式实现这一目标?

我试过这个......

gulp.src([
    './bower_components/jqueryui/**',
    '!./bower_components/jqueryui/themes/**(!base/**)'
])

这是目录结构:

├── themes
│   ├── base
│   ├── black-tie
│   ├── blitzer
│   ├── cupertino
│   ├── dark-hive
│   ├── dot-luv
│   ├── eggplant
│   ├── excite-bike
│   ├── flick
│   ├── hot-sneaks
│   ├── humanity
│   ├── le-frog
│   ├── mint-choc
│   ├── overcast
│   ├── pepper-grinder
│   ├── redmond
│   ├── smoothness
│   ├── south-street
│   ├── start
│   ├── sunny
│   ├── swanky-purse
│   ├── trontastic
│   ├── ui-darkness
│   ├── ui-lightness
│   └── vader
└── ui
    ├── i18n
    └── minified

3 个答案:

答案 0 :(得分:1)

Gulp v4.x

当前的gulp文档包含一个示例glob pattern,可以自定义以满足您的要求。请尝试以下方法:

gulp.task('copyfoobar', function() {
   gulp.src([
       'bower_components/jqueryui/**', // [1]
       '!bower_components/jqueryui/themes/**', // [2]
       'bower_components/jqueryui/themes/{base,ui-lightness}/**' // [3]
   ], { base: './' } )
   .pipe(gulp.dest('./dist'));
});

上面显示的Array个小标签执行以下操作:

  • [1]匹配bower_components/jqueryui/目录下的所有内容。
  • [2]从通过前一个glob模式创建的列表中否定bower_components/jqueryui/themes目录(及其中的所有内容)。
  • [3]bower_components/jqueryui/themes/basebower_components/jqueryui/themes/ui-lightness目录(以及其中的所有内容)添加回列表。

注意: 上述解决方案假定bower_components目录与gulpfile.js位于同一目录中,目标目录为{ {1}}。

结果目录树:

如果您不希望将dist目录添加到目标/目标目录(例如bower_components),请将base选项设置为:

dist

这将导致类似这样的事情:

{ base: './bower_components/' }

. └── dist └── jqueryui ├── themes │ ├── base │ │ └── ... │ └── ui-lightness │ └── ... └── ... 选项设置为:

base

结果如下:

{ base: './' }

Gulp v3.x

不幸的是,上面显示的示例在 Gulp版本3.x 中不起作用,因为 Negations . └── dist └── bower_components └── jqueryui ├── themes │ ├── base │ │ └── ... │ └── ui-lightness │ └── ... └── ... )的处理方式不同 - 它们总是在最后完成不管它们在glob !中指定的顺序如何。 issue 837中讨论的更多信息。

变通方法(对于v.3.x)是利用gulp-src-ordered-globs,这将允许您使用与上一个示例相同的Array个globs。

这个代码将是:

Array

答案 1 :(得分:0)

试试这个

"\"\""

答案 2 :(得分:0)

我只是这样做了。我认为在一项任务中弄清楚它有点太难了。

var task1 = gulp.src(base + 'jqueryui/*.*').pipe(gulp.dest(target));
var task2 = gulp.src(base + 'jqueryui/ui/**').pipe(gulp.dest(target + '/ui/'));
var task3 = gulp.src(base + 'jqueryui/themes/base/**').pipe(gulp.dest(target + '/themes/base/'));
var task4 = gulp.src(base + 'jqueryui/themes/ui-lightness/**').pipe(gulp.dest(target + '/themes/ui-lightness/'));

return [task1, task2, task3, task4];