Dateien / Verzeichnisse von der Gulp-Aufgabe ausschließen

227

Ich habe eine gulp rjs-Aufgabe, die alle meine benutzerdefinierten JS-Dateien (alle Bibliotheken anderer Hersteller) verkettet und hässlich macht.

Ich versuche, einige Dateien / Verzeichnisse von dieser Aufgabe auszuschließen (Controller und Direktiven).

Hier ist mein Baum:

 - 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

Hier meine 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());

});
Oam Psy
quelle
1
Haben Sie versucht, zu ignorieren? npmjs.org/package/gulp-ignore
danbars
1
@ user1655734: Die gulp-ignore-Dokumentation ( npmjs.com/package/gulp-ignore ) schlägt zuerst das Ausschlussmuster ( gulp.src(['./*.js', '!./node_modules/**'])) vor, dann gulp-ignore
Jeromy French

Antworten:

526

Schnelle Antwort

Auf src können Sie mit "!" Immer Dateien angeben, die ignoriert werden sollen.

Beispiel (Sie möchten alle * .min.js-Dateien in Ihrem js-Ordner und Unterordner ausschließen:

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

Sie können dies auch für einzelne Dateien tun.

Erweiterte Antwort:

Auszug aus der Schluckdokumentation:

gulp.src (globs [, options])

Gibt Dateien aus, die dem bereitgestellten Glob oder einem Array von Globs entsprechen. Gibt einen Stream von Vinyl-Dateien zurück, die an Plugins weitergeleitet werden können.

glob bezieht sich auf die Node-Glob-Syntax oder kann ein direkter Dateipfad sein.

Also, auf der Suche nach Knoten-glob Dokumentation können wir sehen , dass es die minimatch Bibliothek verwendet sein Matching zu tun.

In der Minimatch-Dokumentation wird auf Folgendes hingewiesen:

wenn das Muster mit einem beginnt! Zeichen, dann wird es negiert.

Und deshalb mit! Das Symbol schließt Dateien / Verzeichnisse von einer Schluckaufgabe aus

avcajaraville
quelle
11
Sollte dies nicht vermieden werden? Dies ist aus der Node-Glob-Dokumentation: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
Ich musste verwenden: gulp.src([/*file globs*/], {base:"."})um die Glob-Muster richtig funktionieren zu lassen.
Scott
1
@avcajaraville Ich stimme zu, dass Ihre Antwort völlig gültig ist. Ich konnte die gepostete Antwort ohne die Antwort in meinem Kommentar nicht richtig funktionieren lassen. Ich bin mir nicht sicher, wie das nichts mit der Antwort / Frage zu tun hat, sondern wollte nur posten, was für mich funktioniert hat.
Scott
1
@MisterOh eigentlich ist gulp.src vinyl-fs.src, das das Globbing an glob-stream weitergibt, das wiederum Node-glob für die positiven Globs und Minimatch für die negativen Globs verwendet, sodass es in Ordnung ist, negative Muster zu verwenden. Schauen Sie sich die Glob-Stream-Dokumentation an und probieren Sie hier positive und negative Glob-Muster aus oder sehen Sie sich den Code an .
Codebling
18
Negation ist der richtige Weg, dies zu tun. Die Schluckdokumentation war falsch. Ich habe ein Problem mit den Dokumenten geöffnet und PR eingereicht , bei der die Dokumentation korrigiert wurde .
Edward Brey
5

Gulp verwendet Micromatch unter der Haube zum Abgleichen von Globs. Wenn Sie also eine der .min.js-Dateien ausschließen möchten, können Sie dasselbe erreichen, indem Sie eine erweiterte Globbing- Funktion wie die folgende verwenden:

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

Grundsätzlich heißt es: Schnapp dir alles auf jeder Ebene innerhalb von js , was nicht mit * .min.js endet

Jair Reina
quelle