2014-03-07 3 views
52

Versuchen Sie eine Schluckaufgabe zu erstellen, die eine Reihe von Dateien aus verschiedenen Ordnern durch LESS leitet und sie dann in einem Ordner basierend auf dem Original ausgibt Quelle. Betrachten Sie diese Struktur Ordner:Gulp.js - Verwenden Sie den Pfad von gulp.src() in gulp.dest()

Project 
+-- /Module_A 
| +- /less 
| | +- a.less 
| +- a.css 
| 
+-- /Module_B 
    +- /less 
    | +- b.less 
    +- b.css 

Hier ist meine gulpfile:

var gulp = require('gulp'); 
var gutil = require('gulp-util'); 
var less = require('gulp-less'); 

gulp.task('compileLess', function() { 
    gulp.src('./*/less/*.less') 
    .pipe(less()) 
    .pipe(gulp.dest(???)); 
}); 

gulp.task('default', ['compileLess']); 

Ich weiß gulp.dest() erwartet einen Weg in aber in meinem Beispiel weitergegeben wird der Pfad unterschiedlich sein, basierend auf der Quelle Datei. Also, wie kann ich den Pfad von der Quelle packen, ihn modifizieren und ihn dann in gulp.dest() übergeben?

Oder mache ich das falsch?

+1

Ihr Beispiel Eingabe gegeben, was soll der Ausgang sein? Gulp verwendet die relativen Dateipfade (basierend auf dem ersten Glob-Muster), um das Ausgabeverzeichnis zu bestimmen. – OverZealous

+0

Wenn der Eingang "Projekt/Modul_A/less/a.less" ist, möchte ich, dass die Ausgabe "Projekt/Modul_A/a.css" lautet. Ich konnte mit gulp-rename plugin erreichen. – Adam

Antwort

28

sollten Sie einen Blick auf gulp-rename

Ziemlich viel:

gulp.src('./*/less/*.less') 
    .pipe(less()) 
    .pipe(rename(function(path){ 
    // Do something/modify the path here   
    })) 
    .pipe(gulp.dest('./finalRootDestination')) 

Sie gulp.dest bei Endausgabe dir zeigen lassen, aber ändern auf der die einzelnen Dateipfade fliegen, gleich aus welcher Logik Du willst innerhalb des Callbacks gulp-rename.

+0

Danke, das hat perfekt funktioniert. – Adam

+0

Können Sie bitte weiter erklären, wie Sie das erreicht haben? Ich benutze Rename-Plugin, kann aber nicht herausfinden, wie man erhält: "img/jquery-prettyPhoto/images/prettyPhoto/image.jpg" zur Ausgabe in "img/prettyPhoto/image.jpg". Wie entferne ich diese 2 nutzlosen Ordner? danke – pwnjack

+0

@pwnjack: hast du die Dokumentation von 'gulp-rename' gelesen, die ich verlinkt habe? –

81

in Ihrer src setzen Sie die base Option und es wird der ursprüngliche Pfad Ihrer weniger Datei beibehalten.

gulp.task('compileLess', function() { 
    gulp.src('./*/less/*.less', {base: './'}) 
    .pipe(less()) 
    .pipe(gulp.dest('./dist')); 
}); 

Das Ziel ./dist kann alles sein. Wo auch immer Ihre Dateistruktur platziert werden soll.

Weitere Informationen hier: https://github.com/wearefractal/glob-stream#options

+2

Ja! das ist, was ich gesucht habe! – Funkodebat

+2

Perfekt! Dies sollte die akzeptierte Antwort sein. – zumek

+0

Das Schlüsselwort Base hat mir die falsche Idee gegeben. Das ist die Lösung, nach der ich gesucht habe. – Simon

Verwandte Themen