2014-08-28 14 views
6

dire che ho un MENO struttura di directory CSS in questo modo:Rinomina file in base a espressioni regolari nel Gulp

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

Voglio scrivere un compito Gulp che andrà a cercare i file _main.less in ogni sottodirectory della less/ dir, Passare questo gulp-meno e scrivere l'output al css/ dir così:

css/ 
    core.css 
    contact.css 

Perché _main.less include gli altri file nella sua directory, solo i file _main.less dovranno essere analizzati, ma voglio il file di output per avere il nome della directory è in

Finora ho questo:.

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

Ma questo creerà una struttura di directory simile a questo:

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

Ma non è quello che voglio. Stavo pensando di usare un'espressione regolare per abbinare il nome della directory, recuperare questo in una variabile matches e rinominare il file di conseguenza. Qualcosa del genere:

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

Questo codice è solo un esempio. Non riesco a capire come fare una cosa del genere, o se è anche possibile.

È possibile? Se é cosi, come?

risposta

8

Sembra che tu abbia già questo, ma forse non ha visto the gulp-rename plugin?

io non penso anche è necessario utilizzare un RegExp, qualcosa come questo dovrebbe funzionare:

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'));