0

我的 src 文件夹中有不同*.scss的文件,我希望将一个文件编译到它自己的单独文件夹中。
假设我有文件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文件夹中结束。为什么这不起作用?这甚至是尝试实现这一目标的好方法还是有更好的方法?

4

1 回答 1

2

有两种方法可以做到这一点,如下所示:

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) {} 版本中对我不起作用——那肯定会更容易,但我只是不确定。]

于 2018-01-31T23:22:41.723 回答