Исключение файлов/каталогов из задачи Gulp

У меня есть задача gulp rjs, которая объединяет и угадывает все мои пользовательские .JS файлы (любые библиотеки не-поставщиков).

То, что я пытаюсь сделать, исключает некоторые файлы/каталоги из этой задачи (контроллеры и директивы).

Heres my tree:

 - 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

Быстрый ответ

В src вы всегда можете указать файлы для игнорирования с помощью "!".

Пример (вы хотите исключить все *.min.js файлы в папке js и вложенной папке:

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

Вы можете сделать это также для отдельных файлов.

Расширенный ответ:

Извлечен из gulp документации:

gulp.src(globs [, options])

Испускает файлы, соответствующие предоставленному glob или массив глобусов. Возвращает поток виниловых файлов, которые могут быть подключены к плагинам.

glob ссылается на синтаксис node -glob или это может быть прямой путь к файлу.

Итак, глядя на node -glob documentation, мы видим, что он использует библиотеку минимизации, чтобы выполнить ее соответствие.

В документации по минимизации они указывают на следующее:

если шаблон начинается с a! символ, то он отрицается.

И вот почему используя! символ исключает файлы/каталоги из задачи gulp

Ответ 2

Gulp использует micromatch под капотом для сопоставления глобусов, поэтому если вы хотите исключить любой из файлов .min.js, вы можете добиться того же, используя расширенную функцию глобализации, например:

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

По сути, это так: захватывать все на любом уровне внутри js, который не заканчивается на *.min.js