Gulp 为什么不';t吞咽在循环上创建的任务,使其正常工作
我有这个密码Gulp 为什么不';t吞咽在循环上创建的任务,使其正常工作,gulp,Gulp,我有这个密码 var tagfile = require('./_meta/tags.json'); for(var i in tagfile.tags){ var taskName = tagfile.tags[i]; gulp.task(taskName, function() { gulp.src('views/tags.jade') .pipe(rename(taskName + ".html"))
var tagfile = require('./_meta/tags.json');
for(var i in tagfile.tags){
var taskName = tagfile.tags[i];
gulp.task(taskName, function() {
gulp.src('views/tags.jade')
.pipe(rename(taskName + ".html"))
.pipe(gulp.dest('dist/test/'));
})
}
我在文件中有一个对象,在上面我循环遍历这些值并创建吞咽任务。创建任务,但只创建一个文件(对象中的姓氏)
这是文件中的对象
{"tags":["one","three","four","two"]}
只创建two.html
。因此,所有任务都是使用taskName
variable创建的,但是使用相同的变量时,文件名不是它应该的
(我使用了gulprename
和gulpconcat
,结果相同)
ps-任务实际上更加复杂,但在这两种情况下,结果都是相同的您的
var taskName
超出了您的for
循环。这意味着taskName
的值在for
循环的每次迭代中都会更改。当您最终开始执行一项任务时,taskName
的值将始终为two
,因为这是数组中的最后一个值
您需要将taskName
的范围限制为闭包,以防止出现以下情况:
tagfile.tags.forEach(function(taskName) {
gulp.task(taskName, function() {
gulp.src('views/tags.jade')
.pipe(rename(taskName + ".html"))
.pipe(gulp.dest('dist/test/'));
});
});