我有一个带有 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);
}