为什么在循环中创建的gulp任务不能正常工作

时间:2016-03-26 10:43:59

标签: 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"))  
            .pipe(gulp.dest('dist/test/'));  
    })  
}

我有一个文件对象,上面我遍历值并创建gulp任务。任务创建但只创建一个文件(对象中的姓氏)

这是文件中的对象

{"tags":["one","three","four","two"]}

仅创建two.html。所以这些任务都是使用taskName变量创建的,但是使用相同的变量,文件名不是它应该是什么

(我使用gulp-renamegulp-concat,结果相同)

ps - 任务实际上更复杂,但在两种情况下结果都是相同的

1 个答案:

答案 0 :(得分:0)

您的var taskName获得for循环之外的hoisted。这意味着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/'));  
  });  
});