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

Oam*_*Psy 218 minify requirejs uglifyjs gulp

我有一个gulp rjs任务连接和uglifies我所有的自定义.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
Run Code Online (Sandbox Code Playgroud)

在这里,我的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());

});
Run Code Online (Sandbox Code Playgroud)

avc*_*lle 497

快速回答

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

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

gulp.src(['js/**/*.js', '!js/**/*.min.js'])
Run Code Online (Sandbox Code Playgroud)

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

扩大答案:

从gulp文档中提取:

gulp.src(globs [,options])

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

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

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

minimatch文档中,他们指出了以下内容:

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

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

  • 否定是实现这一目标的正确方法.gulp文档不正确.我打开了关于文档的[问题](https://github.com/gulpjs/gulp/issues/1296)并提交了[PR](https://github.com/gulpjs/gulp/pull/1299) [更正的文件](https://github.com/breyed/gulp/blob/patch-1/docs/API.md). (18认同)
  • 这不应该避免吗?这来自node-glob文档:`否定否定的意图将是一个以!开头的模式!匹配与提供的模式不匹配的所有内容.但是,实施是很奇怪的,目前应该避免这种情况.该行为在版本5中已弃用,并将在版本6中完全删除 (11认同)
  • 我需要使用:`gulp.src([/*file globs*/],{base:"."})`以使glob模式正常工作. (2认同)
  • @avcajaraville 我同意你的回答是完全有效的。如果没有我在评论中回复的内容,我无法使发布的回复正常工作。不确定这与答案/问题无关,但只是想发布对我有用的内容。 (2认同)

Jai*_*ina 10

Gulp 在引擎盖下使用 micromatch 来匹配 globs,所以如果你想排除任何 .min.js 文件,你可以通过使用扩展的 globbing功能来实现相同的功能,如下所示:

src("'js/**/!(*.min).js")
Run Code Online (Sandbox Code Playgroud)

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