2014-08-28 4 views
6

Скажет, у меня есть МЕНЬШЕ структура каталогов CSS, как это:Rename файл на основе регулярных выражений в Глотке

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

Я хочу написать глоток задачу, которая будет искать для _main.less файлов в каждом подкаталоге less/ директории, Передайте эту проглатывать-менее и записать вывод в css/ реж как это:

css/ 
    core.css 
    contact.css 

Поскольку _main.less включает в себя другие файлы в его каталоге, только _main.less файлы должны быть разобраны, но я хочу выходной файл, чтобы имя каталога он находится в

До сих пор я это:.

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

Но это создаст структуру каталогов, как это:

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

Но это не что я хочу. Я думал использовать регулярное выражение для соответствия имени каталога, вернуть его обратно в файл matches var и переименовать файл соответствующим образом. Что-то вроде этого:

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

Этот код является лишь примером. Я не могу понять, как это сделать, или если это возможно.

Возможно ли это? Если да, то как?

ответ

8

Вы выглядите, как будто у вас уже есть это, но, возможно, не видели the gulp-rename plugin?

Я даже не думаю, что вам нужно использовать RegExp, что-то, как это должно работать:

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')); 
Смежные вопросы