gulp: удалить каталог из выходного пути назначения - PullRequest
0 голосов
/ 10 марта 2020

Пожалуйста, помогите мне с конфигурацией Gulp

У меня есть две папки sr c scss:

styles1/
styles2/

В каждой папке у меня есть следующая структура для различных страниц сайта:

styles1/front_page/front.page.scss - root file for front page
styles1/front_page/sections/ - front page sections that are impoted in root file(front.page.scss)

Моя задача gulp выглядит следующим образом:

gulp.task('sass-dev', function(done) {
    return gulp.src(['src/scss/**/*.page.scss'])
    .pipe(sass({outputStyle:'expanded'}).on('error',sass.logError))
    .pipe(gulp.dest('./frontend/css/temp/'))
});

Таким образом, я получаю выходной файл со следующим путем:

./frontend/css/temp/styles1/front_page/front.page.css

Но мне нужно

./frontend/css/temp/styles1/front.page.css

Дополнительные примеры ожидаемого результата:

./frontend/css/temp/styles1/about.page.css
./frontend/css/temp/styles1/contact.page.css
./frontend/css/temp/styles2/front.page.css
./frontend/css/temp/styles2/profile.page.css

Можно ли настроить вывод таким образом?

Спасибо!

1 Ответ

1 голос
/ 10 марта 2020

Есть несколько способов сделать это sh. Вот три:

gulp.task('sass-dev', function (done) {

  return gulp.src(['src/scss/**/*.page.scss'], {base: 'src/scss/styles1/front_page' }) 

    .pipe(sass({ outputStyle: 'expanded' }).on('error', sass.logError))

    .pipe(gulp.dest('./frontend/css/temp/styles1'))  // use with base option, works

});

Использование опции base - это в основном устанавливает то, что вам не нужно в конечном пункте назначения, поэтому gulp.dest добавляет styles1 обратно. Таким образом, вы исключаете "src/scss/styles1/front_page и отправляете по адресу плагин. Это позволяет вам удалять или выравнивать каталоги по вашему выбору. В вашем случае:

const flatten = require("gulp-flatten");


gulp.task('sass-dev', function (done) {

  return gulp.src(['src/scss/**/*.page.scss'])

    .pipe(sass({ outputStyle: 'expanded' }).on('error', sass.logError)

    .pipe(flatten({ subPath: [0, -1] }))

    .pipe(gulp.dest('./frontend/css/temp'))

 });

flatten({ subPath[0, -1] }) удалит последнюю папку, то есть 'front_page'.


const rename = require("gulp-rename");
const path = require("path");

gulp.task('sass-dev', function (done) {

  return gulp.src(['src/scss/**/*.page.scss'])

    .pipe(sass({ outputStyle: 'expanded' }).on('error', sass.logError))

    .pipe(rename(function (file) {
      let temp = path.dirname(file.dirname);
      file.dirname = temp;
    }))

    .pipe(gulp.dest('./frontend/css/temp'))

});
...