我想通过使用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
,但我需要一种动态方式来处理许多目录。
那么有什么解决方案吗?
答案 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'));