我有一个带有 gulp.watch 的 for,但它不能正常工作
I have a for with a gulp.watch, but it doesnt work correctly
我需要帮助。
我有这个代码。我有很多来源,但我不使用 n*source 手表。
我认为 for 可以是一个解决方案,但是 watch 被实例化了,它没有读取我的 source[i].
你可以说一些解决办法。
谢谢!
var base_source = '../';
var source = ['dir1', 'dir2'];
var allFiles = '/**/*';
var dest = '../dist';
gulp.task('default', function () {
for(var i = 0; i < source.length ; i++) {
var watchW = base_source + source[i] + allFiles;
gulp.watch(watchW, function(obj){
copyFiles(watchW, dest , obj);
});
}
}
编辑:我需要 copyFiles 函数中的 source[i]
抱歉我的英语不好^^
很难解释为什么您的代码不起作用。如您所见,只有最后一个索引 "i" 绑定到 all 监视函数。这被称为 "reference problem"。您的所有手表功能都通过引用使用相同的索引 i。例如,参见 referencing last index in loop.
使用@OverZealous 的回答作为 creating gulp tasks in a loop 中的指导,这里有一个适合您的解决方案:
var gulp = require('gulp');
// changed to up one directory
var base_source = './';
// changed variable name slightly for clarity
var sources = ['dir1', 'dir2'];
var allFiles = '/**/*';
// changed to up one directory
var dest = './dist';
var watchSources = Object.keys(sources);
gulp.task('default', function () {
watchSources.forEach(function (index) {
var watchW = base_source + sources[index] + allFiles;
gulp.watch(watchW, function (obj) {
copyFiles(watchW, dest, obj);
});
});
});
function copyFiles(watched, to, obj) {
console.log("watched = " + watched);
}
我需要帮助。 我有这个代码。我有很多来源,但我不使用 n*source 手表。 我认为 for 可以是一个解决方案,但是 watch 被实例化了,它没有读取我的 source[i].
你可以说一些解决办法。
谢谢!
var base_source = '../';
var source = ['dir1', 'dir2'];
var allFiles = '/**/*';
var dest = '../dist';
gulp.task('default', function () {
for(var i = 0; i < source.length ; i++) {
var watchW = base_source + source[i] + allFiles;
gulp.watch(watchW, function(obj){
copyFiles(watchW, dest , obj);
});
}
}
编辑:我需要 copyFiles 函数中的 source[i]
抱歉我的英语不好^^
很难解释为什么您的代码不起作用。如您所见,只有最后一个索引 "i" 绑定到 all 监视函数。这被称为 "reference problem"。您的所有手表功能都通过引用使用相同的索引 i。例如,参见 referencing last index in loop.
使用@OverZealous 的回答作为 creating gulp tasks in a loop 中的指导,这里有一个适合您的解决方案:
var gulp = require('gulp');
// changed to up one directory
var base_source = './';
// changed variable name slightly for clarity
var sources = ['dir1', 'dir2'];
var allFiles = '/**/*';
// changed to up one directory
var dest = './dist';
var watchSources = Object.keys(sources);
gulp.task('default', function () {
watchSources.forEach(function (index) {
var watchW = base_source + sources[index] + allFiles;
gulp.watch(watchW, function (obj) {
copyFiles(watchW, dest, obj);
});
});
});
function copyFiles(watched, to, obj) {
console.log("watched = " + watched);
}