Переключить выходную папку на основе имени файла в задании gulp

У меня разные *.scss файлы в моей папке src, и я хочу, чтобы один файл был скомпилирован в отдельной папке.
Предположим, у меня есть файлы normalFile_1.scss, specialFile.scss, normalFile_2.scss, Я хочу, чтобы два обычных файла были скомпилированы в папку Public/Css, специальный файл, однако, должен оказаться в папке Public/Css/Special,

Я попытался получить текущее имя файла в задаче с gulp-tap, который работает отлично.

.pipe($.tap(function (file, t) {
      filename = path.basename(file.path);
      console.log(filename); //outputs normalFile_1.css, specialFile.css, normalFile_2.css
}))

И с gulp-if Затем я хотел переключить выходную папку на основе filename переменная (PATHS.dist - это выходная корневая папка Public):

.pipe($.if(filename == 'specialFile.css', gulp.dest(PATHS.dist + '/Css/Special'), gulp.dest(PATHS.dist + '/Css')));

Но все еще заканчивается в Public/Css папка. Почему это не работает? Это даже хороший способ сделать это или есть лучшие методы?

1 ответ

Есть два способа сделать это, показанные ниже:

var gulp = require("gulp");
var sass = require("gulp-sass");
var rename = require("gulp-rename");
var path = require('path');

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

  return gulp.src('src/*.scss')
    .pipe(sass().on('error', sass.logError))

    .pipe(rename(function (path) {
      if (path.basename == "specialFile") {
        path.dirname = "Special";
      }
    }))

    .pipe(gulp.dest('Public/Css'))

  //   .pipe(gulp.dest(function(file) {
  //     var temp = file.path.split(path.sep);
  //     var baseName = temp[temp.length - 1].split('.')[0];
  //     console.log(baseName);
  //     if (baseName == "specialFile") {
  //       return 'Public/Css/Special';
  //     }
  //     else return 'Public/Css';
  // }))

});

gulp.task('default', ['sass']);

Очевидно, я предлагаю переименовать версию.

[Почему простой файл file.stem или file.basename не работает для меня в версии gulp.dest(function (file) {}, которую я не знаю - это, конечно, будет проще, но я просто получаю неопределенную информацию.]

Другие вопросы по тегам