2016-12-22 10 views
1

У меня есть следующая структура в моем source каталоге:Условно создание каталогов из имен файлов в задаче Глотка

|-source 
    |-home.pug 
    |-page1.pug 
    |-page2.pug 

Я ожидаю, чтобы получить это в моем dest каталоге:

|-dest 
    |-index.html (former home.pug) 
    |-page1/index.html (former page1.pug) 
    |-page2/index.html (former page2.pug) 

Моего Gulpfile.js выглядит например:

var 
    gulp = require('gulp'), 
    gulpif = require('gulp-if'), 
    gzip = require('gulp-gzip'), 
    htmlmin = require('gulp-htmlmin'), 
    path = require('path'), 
    pug = require('gulp-pug'), 
    rename = require('gulp-rename'); 

gulp.task('views', function() { 

    gulp.src('source/!(home)*.pug') 
    .pipe(pug()) 
    .pipe(rename(function(file) { 
     file.dirname = path.join(file.dirname, file.basename); 
     file.basename = 'index'; 
     file.extname = '.html'; 
    })) 
    .pipe(htmlmin()) 
    .pipe(gulp.dest('dest/')) 

    gulp.src('source/home.pug') 
    .pipe(pug()) 
    .pipe(rename(function(file) { 
     file.basename = 'index'; 
     file.extname = '.html'; 
    })) 
    .pipe(htmlmin()) 
    .pipe(gulp.dest('dest/')) 
}); 

Как вы можете видеть, существуют два блока с использованием того же кода сверху и снизу. Я бы хотел найти более оптимальное решение.

Я добавил gulp-if и пытался реализовать, если-иначе логика:

gulp.task('views', function() { 
    gulp.src('source/*.pug') 
    .pipe(pug()) 
    .pipe(gulp-if(
    'home.pug', 
    rename(function(file) { 
     file.basename = 'index'; 
     file.extname = '.html'; 
    }), 
    rename(function(file) { 
     file.dirname = path.join(file.dirname, file.basename); 
     file.basename = 'index'; 
     file.extname = '.html'; 
    }))) 
    .pipe(htmlmin()) 
    .pipe(gulp.dest('dest/')) 
}); 

Но это не сработало. Gulp создал резервную dest/home/index.html вместо dest/index.html.

ответ

0

Ваш Gulpfile - это просто JavaScript. Это означает, что вы можете использовать регулярные операторы if (test) { }, как и в любой программе JavaScript. Нет необходимости в gulp-if.

Это даже меньше, чем при использовании gulp-if и получает вас к одной rename() операции:

gulp.task('views', function() { 
    return gulp.src('source/*.pug') 
    .pipe(pug()) 
    .pipe(rename(function(file) { 
     if (file.basename !== 'home') { 
     file.dirname = path.join(file.dirname, file.basename); 
     } 
     file.basename = 'index'; 
    })) 
    .pipe(htmlmin()) 
    .pipe(gulp.dest('dest/')) 
}); 

я ушел из file.extname = '.html' линии. Плагин pug() уже изменяет расширение от .pug до .html, поэтому вам не нужно это делать самостоятельно.

+0

Спасибо, Свен. Он отлично работает! –