Esclusione di file / directory dall'attività Gulp


227

Ho un compito gulp rjs che concatena e semplifica tutti i miei file .JS personalizzati (tutte le librerie non vendor).

Quello che sto cercando di fare è escludere alcuni file / directory da questa attività (controller e direttive).

Ecco il mio albero:

 - 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

Qui il mio 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
Hai provato gulp-ignore? npmjs.org/package/gulp-ignore
danbars

1
@utente1655734: la documentazione di gulp-ignore ( npmjs.com/package/gulp-ignore ) suggerisce prima il modello exclude ( gulp.src(['./*.js', '!./node_modules/**'])), quindi gulp-ignore
Jeromy French,

Risposte:


526

Risposta rapida

Su src, puoi sempre specificare i file da ignorare usando "!".

Esempio (si desidera escludere tutti i file * .min.js dalla cartella e dalla sottocartella js:

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

Puoi farlo anche per singoli file.

Risposta estesa:

Estratto dalla documentazione di gulp:

gulp.src (globs [, opzioni])

Emette i file corrispondenti a glob forniti o una serie di globs. Restituisce un flusso di file in vinile che possono essere reindirizzati ai plug-in.

glob si riferisce a sintassi nodo-glob o può essere un percorso di file diretto.

Quindi, guardando a documentazione di node-glob possiamo vedere che usa la libreria minimatch per fare la sua corrispondenza.

Sulla documentazione minimatch , indicano quanto segue:

se lo schema inizia con un! carattere, quindi viene negato.

Ed è per questo che usando! il simbolo esclude file / directory da un'attività gulp


11
Questo non dovrebbe essere evitato? Questo è tratto dalla documentazione di 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
Avevo bisogno di usare: gulp.src([/*file globs*/], {base:"."})per far funzionare correttamente i pattern glob.
Scott,

1
@avcajaraville Sono d'accordo che la tua risposta è totalmente valida. Non sono riuscito a far funzionare correttamente la risposta postata senza quello che ho risposto nel mio commento. Non sono sicuro di come ciò non abbia nulla a che fare con la risposta / domanda, ma volevo solo pubblicare ciò che ha funzionato per me.
Scott,

1
@MisterOh in realtà, gulp.src è vinyl-fs.src, che passa il globbing al glob-stream, che a sua volta usa il nodo-glob per i globi positivi e il minimatch per i globi negativi, quindi è ok per usare modelli negativi. Consulta qui la documentazione di glob-stream e campiona qui i pattern positivi e negativi , oppure dai un'occhiata al codice .
Codebling

18
La negazione è il modo giusto per farlo. La documentazione di gulp era errata. Ho aperto un problema relativo ai documenti e inviato le PR che hanno corretto la documentazione .
Edward Brey,

5

Gulp usa il micromatch sotto il cofano per abbinare i globs, quindi se vuoi escludere uno qualsiasi dei file .min.js, puoi ottenere lo stesso usando una funzionalità di globbing estesa come questa:

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

Fondamentalmente quello che dice è: prendi tutto a qualsiasi livello all'interno di js che non termina con * .min.js

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.