2014-08-28 7 views
6

sagen, dass ich eine LESS CSS Verzeichnisstruktur wie folgt aussehen:Datei umbenennen basierend auf regex in Gulp

less/ 
    core/ 
     _main.less 
     header.less 
     body.less 
     footer.less 
    contact/ 
     _main.less 
     form.less 
     details.less 

ich eine Gulp Aufgabe schreiben möchten, die für die _main.less Dateien in jedem Unterverzeichnis des less/ dir aussehen wird, Geben sie diese schlucken weniger und die Ausgabe an die css/ dir so schreiben:

css/ 
    core.css 
    contact.css 

Da _main.less die anderen Dateien enthält darin Verzeichnis ist, werden nur die _main.less Dateien werden analysiert haben, aber ich will die Ausgabedatei den Namen des Verzeichnisses zu haben, es ist in

Bisher habe ich dies:.

gulp.src('less/*/*/_main.less') 
    .pipe(less()) 
    .pipe(gulp.dest('css')); 

Aber das wird eine Verzeichnisstruktur wie folgt erstellen:

css/ 
    core/ 
     _main.css 
    contact/ 
     _main.css 

Aber das ist nicht was ich möchte. Ich dachte daran, eine Regex zu verwenden, um den Verzeichnisnamen zu finden, in einem matches var, und benennen Sie die Datei entsprechend um. Etwas wie dieses:

gulp.src(/less\/[^\/]+\/([^\/]+)\/_main.less/) 
    .pipe(less()) 
    .pipe(rename(function(context) { 
     context.src.matches[1] + '.css' 
    })) 
    .pipe(gulp.dest('css')); 

Dieser Code ist nur ein Beispiel. Ich kann nicht herausfinden, wie man so etwas macht oder ob es überhaupt möglich ist.

Ist das möglich? Wenn das so ist, wie?

Antwort

8

Sie sehen aus wie Sie bereits haben, aber vielleicht nicht the gulp-rename plugin?

Ich weiß nicht einmal denken, dass Sie ein RegExp verwenden müssen, so etwas wie dies funktionieren soll:

var rename = require('gulp-rename'), 
    path = require('path'); // node Path 

//... 

gulp.src('less/**/_main.less') 
    .pipe(less()) 
    .pipe(rename(function(filepath) { 
     // replace file name to that of the parent directory 
     filepath.basename = path.basename(filepath.dirname); 
     // remove parent directory from relative path 
     filepath.dirname = path.dirname(filepath.dirname); 
     // leave extension as-is 
    })) 
    .pipe(gulp.dest('css'));