排除Gulp任务中的文件/目录

我有一个gulp rjs任务,它连接并丑化我所有的自定义. js文件(任何非供应商库)。

我要做的是,从这个任务(控制器和指令)排除一些文件/目录。

这是我的树:

 - application
- resources
- js
main.js
- vendor
- jquery
- modernzr
- angular
- controllers
- controller1
- controller2
- controller3
- directives
- directives1
- directives2
- directives3
- widgets
- widget1
- widget2
- widget3
- widget4
- modules
- modules1
- modules2
- modules3
- modules4

这是我的gulp.js

dir = {
app:        'application',
dest:       'dest',
};


config = {
src: {
js: dir.app + '/resources/js'
},
dest: {
js: dir.dest + '/resources/js'
}
};


gulp.task('rjs', function() {


rjs({
baseUrl: config.src.js,
out: 'main.js',
name: 'main',
mainConfigFile: config.src.js + '/main.js',
exclude: [ 'jquery', 'angular']
})
.pipe(prod ? uglify({ mangle: false, outSourceMap: true, compress: { drop_console: true } }) : gutil.noop())
.pipe(gulp.dest(config.dest.js))
.pipe(filesize())
.pipe(dev ? connect.reload() : gutil.noop());


});
165109 次浏览

迅速的回答

在src上,你可以使用"!"来指定要忽略的文件。

示例(你想要排除js文件夹和子文件夹中的所有*.min.js文件:

gulp.src(['js/**/*.js', '!js/**/*.min.js'])

对于单个文件也可以这样做。

答:扩大

从gulp文档中提取:

饮而尽。src(一团团[选项])

发出匹配提供的glob或glob数组的文件。返回乙烯基文件流,可以管道到插件。

glob指向node-glob语法或者它可以是一个直接的文件路径。

因此,查看node-glob文档,我们可以看到它使用了minimatch库来进行匹配。

minimatch文档上,它们指出了以下内容:

如果模式以!性格,那么它就被否定了。

这就是为什么使用!符号将排除gulp任务中的文件/目录 .

Gulp在底层使用微匹配来匹配glob,所以如果你想排除任何.min.js文件,你可以通过使用扩展的globbing特性来实现同样的目的,就像这样:

src("'js/**/!(*.min).js")

基本上它说的是:获取js中任何级别上不以* .min.js结尾的所有内容