Переименовать файл на основе regex в Gulp

скажем, у меня меньше структуры каталогов CSS, как это:

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

Я хочу написать задачу Gulp, которая будет искать _main.less файлы в каждом подкаталоге less/ dir, передайте это в gulp-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 и переименуйте файл соответствующим образом. Что-то вроде этого:--12-->
gulp.src(/less/[^/]+/([^/]+)/_main.less/)
    .pipe(less())
    .pipe(rename(function(context) {
        context.src.matches[1] + '.css'
     }))
    .pipe(gulp.dest('css'));

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

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

1 ответов


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

Я даже не думаю, что вам нужно будет использовать 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'));