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

时间:2014-04-30 09:20:39

标签: requirejs gulp minify uglifyjs

我有一个gulp rjs任务连接和uglify所有自定义.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());

});

2 个答案:

答案 0 :(得分:486)

快速回答

在src上,您始终可以使用“!”指定要忽略的文件。

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

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

您也可以为单个文件执行此操作。

扩展答案:

Extracted from gulp documentation:

  

gulp.src(globs [,options])

     

发出匹配提供的glob或一组globs的文件。返回可以通过管道传输到插件的Vinyl文件流。

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

所以,期待node-glob documentation我们可以看到它使用minimatch库进行匹配。

minimatch documentation上,他们指出了以下内容:

  

如果模式以a开头!性格,然后它被否定。

这就是使用的原因!符号将从gulp任务中排除文件/目录

答案 1 :(得分:0)

Gulp在后台使用微匹配来匹配glob,因此,如果要排除任何.min.js文件,则可以通过使用extended globbing这样的功能来实现相同目的:

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

基本上是这样:抓取 js 中任何不以 *。min.js

结尾的内容