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


227

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

});

1
您是否尝试过无视?npmjs.org/package/gulp-ignore
danbars

1
@ user1655734:gulp-ignore文档(npmjs.com/package/gulp-ignore)提出了排除模式(gulp.src(['./*.js', '!./node_modules/**'])),然后是
gulp

Answers:


526

快速回答

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

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

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

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

扩展答案:

摘自gulp文档:

gulp.src(globs [,options])

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

glob表示node-glob语法,也可以是直接文件路径。

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

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

如果模式以!开头 字符,然后被否定。

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


11
不应该避免吗?这来自node-glob文档:Negation The intent for negation would be for a pattern starting with ! to match everything that doesn't match the supplied pattern. However, the implementation is weird, and for the time being, this should be avoided. The behavior is deprecated in version 5, and will be removed entirely in version 6.
Mister Oh

2
我需要使用:gulp.src([/*file globs*/], {base:"."})为了使glob模式正常工作。
Scott

1
@avcajaraville我同意您的回答完全正确。没有我的评论,我无法使发布的响应正常工作。不确定与答案/问题无关吗,只是想发布对我有用的东西。
Scott

1
@MisterOh实际上,gulp.src是Vinyl-fs.src,它将globing传递给glob-stream,后者又将node-glob用于正向glob,将minimatch用于负向glob,因此可以使用负模式。在这里查看glob-stream文档并样本正负glob模式,或查看代码
编码

18
否定是做到这一点的正确方法。gulp文档不正确。我打开了有关文档的问题,并提交了更正了文档的PR
爱德华·布雷

5

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

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

基本上说的是:抓住内部任何级别的所有内容 js不以* .min.js结尾的内容

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.