Исключение файлов / каталогов из задачи 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/**'])сначала шаблон exclude ( ), затем
gulp

Ответы:

526

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

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

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

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

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

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

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

gulp.src (globs [, options])

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

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

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

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

если шаблон начинается с! характер, то это отрицается.

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

avcajaraville
источник
11
Разве этого не следует избегать? Это из документации по ноду-глобу: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.
Мистер О,
2
Мне нужно было использовать: gulp.src([/*file globs*/], {base:"."})для того, чтобы шаблоны шара работали правильно.
Скотт
1
@avcajaraville Я согласен, что ваш ответ полностью действителен. Я не смог заставить опубликованный ответ работать правильно без того, что я ответил в своем комментарии. Не уверен, что это не имеет никакого отношения к ответу / вопросу, но просто хотел опубликовать то, что сработало для меня.
Скотт
1
@MisterOh на самом деле, gulp.src винил-fs.src, который проходит глобирование прочь к Глоб-потоку, который , в свою очередь , использует узел-Глобо для положительных комков и minimatch для отрицательных комков, так что это нормально использовать негативные модели. Ознакомьтесь с документацией о глобальном потоке и с примерами положительных и отрицательных шаблонов глобуса или посмотрите на код .
Codebling
18
Отрицание - верный способ сделать это. Глоток документации был неверным. Я открыл вопрос относительно документации и представил PR , который исправил документацию .
Эдвард Брей
5

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

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

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

Jair Reina
источник