【问题标题】:How to pass an argument from a gulp watcher to a task如何将参数从 gulp 观察者传递给任务
【发布时间】:2019-02-25 02:29:44
【问题描述】:

如果我有这样的观察者:

gulp.watch('js/**/*.js').on('change', path => {
  gulp.series(build, reload)();
});

...任务build 看起来像这样:

const build = done => {
  return gulp
    .src(path) // Use "path" here
    .pipe(
      rename({
        dirname: ''
      })
    )
    .pipe(uglify())
    .pipe(gulp.dest('build'));
};

如何将path 参数传递给build 任务?

【问题讨论】:

    标签: javascript node.js gulp gulp-watch gulp-task


    【解决方案1】:

    作为一个练习,我相信我已经按照您的意愿完成了这项工作。但首先让我说限制源管道的传统方法是使用gulp-newer 之类的东西。你应该看看这是否能达到你想要的效果。

    但这里有一些可能对你有用的东西[没有经过很好的测试!]:

    function build (path)  {
      return new Promise(resolve => {
    
        // using setTimeout() to prove async/await is working as expected
        setTimeout(() => {
          resolve('resolved');
        }, 2000);
    
        // put your gulp.src pipeline here using 'path'
        console.log("2 path = " + path);
      });
    };
    
    function anotherTask (path)  {
      return new Promise(resolve => { 
    
        // put your gulp.src pipeline here
        console.log("4 path = " + path); });
    };
    
    function testWatch () {
    
      console.log("in testWatch");
    
      // debounceDelay because gulp likes to call the watcher 2 or 3times otherwise
      //  see [gulp watch task running multiple times when a file is saved][2]
    
      var watcher = gulp.watch('js/**/*.js', { debounceDelay: 2000 });
    
      // I added the async/await because I wasn't sure those functions would be run in series
      //  as you wanted.
    
      // With the event listener route I couldn't get gulp.series to work, 
      //  so went with async/await.
    
      watcher.on('change', async function(path, stats) {
    
        console.log('1 File ' + path + ' was changed');
        await build(path);
        console.log("3 after build");
    
        // I would assume that the **last** task in the chain doesn't need 'await'
        // or to return a promise as in anotherTask
    
        await anotherTask(path);
        console.log("5 after anotherTask");
      });
    };
    
    gulp.task('default', gulp.series(testWatch));
    

    gulp watch running multiple times上面代码中提到。

    输出(我的 js watch src 和你的不一样):

    in testWatch
    1 File src\js\main.js was changed
    2 path = src\js\main.js
    3 after build
    4 path = src\js\main.js
    5 after anotherTask
    1 File src\js\taxonomy.js was changed
    2 path = src\js\taxonomy.js
    3 after build
    4 path = src\js\taxonomy.js
    5 after anotherTask
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2015-04-16
      • 2019-03-10
      • 1970-01-01
      • 2017-01-23
      • 2023-03-26
      相关资源
      最近更新 更多