Виключення файлів / каталогів із завдання 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
Ви пробували gulp-ignore? npmjs.org/package/gulp-ignore
danbars

1
@ user1655734: документація gulp-ignore ( npmjs.com/package/gulp-ignore ) пропонує gulp.src(['./*.js', '!./node_modules/**'])спочатку виключити шаблон ( ), потім gulp-ignore
Jeromy French

Відповіді:


526

Швидка відповідь

У src ви завжди можете вказати файли, які слід ігнорувати, використовуючи "!".

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

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

Ви можете це зробити і для окремих файлів.

Розгорнута відповідь:

Витягнуто з документації із глоткою:

gulp.src (глобуси [, параметри])

Вилучає файли, що відповідають наданому глобусу або масиву глобусів. Повертає потік файлів з вінілу, які можна перенести на плагіни.

glob посилається на синтаксис node-glob або це може бути прямий шлях до файлу.

Отже, дивлячись на node-glob документацію, ми можемо побачити, що вона використовує бібліотеку minimalatch, щоб зробити її відповідність.

У документації про мінімальну перевірку вони вказують на наступне:

якщо шаблон починається з! символу, то його заперечують.

І саме тому, використовуючи! символ буде виключати файли / каталоги із завдання gulp


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, який передає глобус в глобальний потік, який, у свою чергу, використовує node-glob для позитивних глобусів і мінімізує для негативних глобусів, тому нормально використовувати негативні структури. Ознайомтеся з документацією на глобальний потік і виберіть тут позитивні та негативні шаблони глобальних потоків або подивіться на код .
кодування

18
Заперечення - це правильний спосіб зробити це. Документація залпу була неправильною. Я відкрив питання про документи і подав PR , який виправив документацію .
Едвард Брей

5

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

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

В основному, це говорить: захоплюйте все на будь-якому рівні всередині js, що не закінчується * .min.js

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.