我有一个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());

});

迅速的回答

在src上,你总是可以使用“!”指定要忽略的文件。

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

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

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

答:扩大

摘自gulp文档:

饮而尽。src(一团团[选项]) 发出匹配提供的glob或glob数组的文件。返回乙烯基文件流,可以管道到插件。

Glob指的是节点- Glob语法,也可以是直接的文件路径。

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

在minimatch文档中,他们指出了以下几点:

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

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


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

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

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