什么 globbing 模式将排除一个子目录,除了它里面的其他两个子目录?
What globbing pattern will exclude a subdirectory except for two other subdirectories inside it?
我正在从 bower 复制 jQueryUI 库。我只想从 "themes" 目录中复制两个主题。我要保留的主题文件夹是 "base" 和 "ui-lightness".
如何使用通配模式完成此操作?
我已经试过了...
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
试试这个
gulp.task('copy_flolder',function(){
gulp.src(['./bower_components/jqueryui/**', '!./bower_components/jqueryui/themes/**'])
.pipe(gulp.dest('your dist folder'))
});
gulp.task('copy_only_Themes',['copy_flolder'], function() {
gulp.src(['./bower_components/jqueryui/themes/base/**', './bower_components/jqueryui/themes/ui-lightness/**'])
.pipe(gulp.dest('your dist folder'))
});
我只是这样做了。我觉得在一个任务中想出来有点太难了。
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];
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'));
});
上面显示的 glob Array
执行以下操作:
[1]
匹配 bower_components/jqueryui/
目录下的所有内容。
[2]
从通过先前的 glob 模式创建的列表中否定 bower_components/jqueryui/themes
目录(以及其中的所有内容)。
[3]
将 bower_components/jqueryui/themes/base
和 bower_components/jqueryui/themes/ui-lightness
目录(以及其中的所有内容)添加回列表。
注意: 上面的解决方案假定 bower_components
目录与 gulpfile.js
,目标目录为dist
.
结果目录树:
如果您不想将 bower_components
目录添加到您的 target/destination 目录(即 dist
),则将 base 选项设置为:
{ base: './bower_components/' }
这将导致如下结果:
.
└── dist
└── jqueryui
├── themes
│ ├── base
│ │ └── ...
│ └── ui-lightness
│ └── ...
└── ...
将 base
选项设置为:
{ base: './' }
结果如下:
.
└── dist
└── bower_components
└── jqueryui
├── themes
│ ├── base
│ │ └── ...
│ └── ui-lightness
│ └── ...
└── ...
Gulp v3.x
不幸的是,上面显示的示例在 Gulp 版本 3.x 中不起作用,因为 Negations (!
) 的处理方式不同 - 无论它们在 glob Array
中指定的顺序如何,它们总是最后完成。 issue 837.
中讨论的更多信息
解决方法(对于 v.3.x)是利用 gulp-src-ordered-globs,这将允许您使用与前一个示例相同的 Array
globs。
此代码为:
var gulpSrc = require('gulp-src-ordered-globs'); // require the gulp.src() wrapper.
gulp.task('copyfoobar', function() {
gulpSrc([ // <-- gulpSrc() used instead of gulp.src()
'bower_components/jqueryui/**',
'!bower_components/jqueryui/themes/**',
'bower_components/jqueryui/themes/{base,ui-lightness}/**'
], { base: './' } )
.pipe(gulp.dest('./dist'));
});
我正在从 bower 复制 jQueryUI 库。我只想从 "themes" 目录中复制两个主题。我要保留的主题文件夹是 "base" 和 "ui-lightness".
如何使用通配模式完成此操作?
我已经试过了...
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
试试这个
gulp.task('copy_flolder',function(){
gulp.src(['./bower_components/jqueryui/**', '!./bower_components/jqueryui/themes/**'])
.pipe(gulp.dest('your dist folder'))
});
gulp.task('copy_only_Themes',['copy_flolder'], function() {
gulp.src(['./bower_components/jqueryui/themes/base/**', './bower_components/jqueryui/themes/ui-lightness/**'])
.pipe(gulp.dest('your dist folder'))
});
我只是这样做了。我觉得在一个任务中想出来有点太难了。
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];
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'));
});
上面显示的 glob Array
执行以下操作:
[1]
匹配bower_components/jqueryui/
目录下的所有内容。[2]
从通过先前的 glob 模式创建的列表中否定bower_components/jqueryui/themes
目录(以及其中的所有内容)。[3]
将bower_components/jqueryui/themes/base
和bower_components/jqueryui/themes/ui-lightness
目录(以及其中的所有内容)添加回列表。
注意: 上面的解决方案假定 bower_components
目录与 gulpfile.js
,目标目录为dist
.
结果目录树:
如果您不想将 bower_components
目录添加到您的 target/destination 目录(即 dist
),则将 base 选项设置为:
{ base: './bower_components/' }
这将导致如下结果:
.
└── dist
└── jqueryui
├── themes
│ ├── base
│ │ └── ...
│ └── ui-lightness
│ └── ...
└── ...
将 base
选项设置为:
{ base: './' }
结果如下:
.
└── dist
└── bower_components
└── jqueryui
├── themes
│ ├── base
│ │ └── ...
│ └── ui-lightness
│ └── ...
└── ...
Gulp v3.x
不幸的是,上面显示的示例在 Gulp 版本 3.x 中不起作用,因为 Negations (!
) 的处理方式不同 - 无论它们在 glob Array
中指定的顺序如何,它们总是最后完成。 issue 837.
解决方法(对于 v.3.x)是利用 gulp-src-ordered-globs,这将允许您使用与前一个示例相同的 Array
globs。
此代码为:
var gulpSrc = require('gulp-src-ordered-globs'); // require the gulp.src() wrapper.
gulp.task('copyfoobar', function() {
gulpSrc([ // <-- gulpSrc() used instead of gulp.src()
'bower_components/jqueryui/**',
'!bower_components/jqueryui/themes/**',
'bower_components/jqueryui/themes/{base,ui-lightness}/**'
], { base: './' } )
.pipe(gulp.dest('./dist'));
});