在gulp任务中根据文件名切换输出文件夹 [英] Switch output folder based on filename in gulp task

查看:322
本文介绍了在gulp任务中根据文件名切换输出文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的src文件夹中有不同的 *。scss 文件,我希望将一个文件编译到它自己的单独文件夹中。

让我们假设我有文件 normalFile_1.scss specialFile.scss normalFile_2.scss 。我想要将两个普通文件编译到文件夹 Public / Css ,然而特殊文件应该放在文件夹 Public / Css / Special



我试图用 gulp-tap 获取当前文件名,这很好。文件名= path.basename(file.path) ;
console.log(filename); //输出normalFile_1.css,specialFile.css,normalFile_2.css
)))

然后使用 gulp-if 然后我想根据 filename 来切换输出文件夹。 code> variable(PATHS.dist是输出root文件夹 Public ):

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

但一切仍然以 Public / Css 文件夹。为什么这不起作用?这是甚至是一个很好的方式来实现,或有更好的方法吗?

解决方案

有两种方法可以显示如下:

  var gulp = require(gulp); 
var sass = require(gulp-sass);
var rename = require(gulp-rename);
var path = require('path');
$ b $ gulp.task('sass',function(){

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

.pipe(重命名(函数(路径){
if(path.basename ==specialFile){
b.d.dname =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';
//}
//否则返回'Public / Css';
//}))

});

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

显然我建议重命名版本。

[为什么一个简单的file.stem或file.basename不适用于我在gulp.dest(function(file){}版本中我不知道 - 这当然会更容易,但我只是未定义。]


I have different *.scss files in my src folder and I want one file to be compiled in its own separate folder.
Lets assume I have the files normalFile_1.scss, specialFile.scss, normalFile_2.scss. I want the two normal files to be compiled to the folder Public/Css, the special file however should end up in the folder Public/Css/Special.

I have tried to get the current filename in the task with gulp-tap, which works fine.

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

And with gulp-if I then wanted to switch the output folder based on the filename variable (PATHS.dist is the output "root" folder Public):

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

But everything still ends up in the Public/Css folder. Why does this not work? Is this even a good way of trying to accomplish that or are there better methods?

解决方案

There are two ways to do this shown below:

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']);

Obviously I suggest the rename version.

[Why a simple file.stem or file.basename doesn't work for me in the gulp.dest(function (file) {} version I don't know - that would certainly be easier but I just get undefined.]

这篇关于在gulp任务中根据文件名切换输出文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆