Переименовать файл на основе 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'));