Переименовать файл на основе регулярного выражения в Gulp
Скажем, у меня есть Меньшая структура каталогов CSS, как это:
less/
core/
_main.less
header.less
body.less
footer.less
contact/
_main.less
form.less
details.less
Я хочу написать задачу Gulp, которая будет искать _main.less
файлы в каждом подкаталоге less/
DIR, передать это без глотка и записать вывод в 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'));
Этот код является лишь примером. Я не могу понять, как сделать что-то подобное, или если это вообще возможно.
Это возможно? Если так, то как?
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'));