使用 gulp 将文件复制到多个目录

Copy a file to several directories with 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 但我需要一种动态方式来处理多个目录。 那么有什么解决办法吗?

这是我给你的建议。你可以尝试这样的事情:

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

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

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;
});

不确定这是最好的方法,但您可以通过节点的 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'));