我有这段代码
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-rename
和gulp-concat
,结果相同)
ps - 任务实际上更复杂,但在两种情况下结果都是相同的
答案 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/'));
});
});