一尘不染

使用Gulp.js和通配模式在适当位置修改文件(相同目标)

node.js

我有一个gulp任务,试图将.scss文件转换为.css文件(使用gulp-ruby-
sass),然后将生成的.css文件放到找到原始文件的位置。问题是,由于我使用的是遍历模式,因此我不一定知道原始文件的存储位置。

在下面的代码中,我尝试使用gulp-tap进入流并找出从中读取流的当前文件的文件路径:

gulp.task('convertSass', function() {
    var fileLocation = "";
    gulp.src("sass/**/*.scss")
        .pipe(sass())
        .pipe(tap(function(file,t){
            fileLocation = path.dirname(file.path);
            console.log(fileLocation);
        }))
        .pipe(gulp.dest(fileLocation));
});

根据的输出console.log(fileLocation),此代码似乎应该可以正常工作。但是,生成的CSS文件似乎比我期望的高了一个目录。应该在的位置project/sass/partials,生成的文件路径为just
project/partials

如果有一个简单得多的方法,我肯定会更喜欢这种解决方案。谢谢!


阅读 210

收藏
2020-07-07

共1个答案

一尘不染

正如您所怀疑的那样,您使这一过程变得太复杂了。目的地也不必是动态的,因为Globed路径也用于此dest。只需通过管道将其传递到您要从中遍历src的同一基本目录,在本例中为“
sass”:

gulp.src("sass/**/*.scss")
  .pipe(sass())
  .pipe(gulp.dest("sass"));

如果您的文件没有共同的基础,并且您需要传递路径数组,那么这已不再足够。在这种情况下,您需要指定基本选项。

var paths = [
  "sass/**/*.scss", 
  "vendor/sass/**/*.scss"
];
gulp.src(paths, {base: "./"})
  .pipe(sass())
  .pipe(gulp.dest("./"));
2020-07-07