使用gulp

时间:2015-10-02 04:30:00

标签: copy gulp

我想通过使用gulp将特定文件style.css复制到几个目录的css文件夹中,例如:

Project
- directory 1
 - css
- directory 2
 - css
- directory 3
 - css
- directory 4
 - css
- style.css

据我所知,gulp只能将一个文件或多个文件复制到一个目录而不是几个目录。

gulp.task('copy', function() {
  return gulp.src('project/style.css')
    .pipe(gulp.dest('project'));
});

考虑到我知道可以写几个gulp.dest,但我需要一种动态方式来处理许多目录。 那么有什么解决方案吗?

3 个答案:

答案 0 :(得分:3)

您可以创建一个单个源,在其上添加对.pipe(gulp.dest(...))的调用,然后返回该结果:

var gulp = require("gulp");

gulp.task('default', function () {
    var dests = ['./out1', './out2', './out3'];
    var stream = gulp.src('./project/style.css');
    for (var i = 0; i < dests.length; i++) {
        stream = stream.pipe(gulp.dest(dests[i]));
    }
    return stream;
});

答案 1 :(得分:1)

这是我给你的建议。你可以试试这样的东西:

gulp.task('copy-multiple-dest', function () {

    return gulp.src('./project/style.css')

    .pipe(gulp.dest('./directory 1'))
    .pipe(gulp.dest('./directory 2'))
    .pipe(gulp.dest('./directory 3'));

});

更新:(不确定这是不是很好)

gulp.task('multiples', function () {  
    var directories = ['./directory 1', './directory 2'];  
    for (var i = 0; i < directories.length; i++) {  
        gulp.src('./project/style.css')  
            .pipe(gulp.dest(directories[i]));  
    }
});

答案 2 :(得分:-1)

不确定这是最好的方法,但您可以通过节点的fs读取目录,并可选择使用正则表达式过滤它们,然后通过reduce

使用管道将每个结果名称作为目标
var fs = require("fs");

fs.readdirSync('project').filter(function(fname) {
    return fname.match(/directory\s\d+/);
}).reduce(function(stream, dest){
    return stream.pipe(gulp.dest('project/'+dest+'/css'));
}, gulp.src('project/style.css'));