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