【问题标题】:Gulp run alternativeGulp 运行替代方案
【发布时间】:2015-03-03 07:36:38
【问题描述】:

每次我运行 gulp,我都会看到这条消息 gulp.run() has been deprecated. Use task dependencies or gulp.watch task triggering instead.

示例代码:

var watch = require('gulp-watch');
watch(['public/**/*.js','!public/**/*.min.js'],function(){
    gulp.run('compressjs');
    gulp.run('bs-reload');
});

如何避免在 gulp-watch 中使用 gulp.run()

【问题讨论】:

    标签: gulp gulp-watch


    【解决方案1】:

    您不应该使用run。这是另一种选择(解决您答案的那一部分),但不是您需要做的:

    gulp
        .start('default')
        .once('task_stop', function(){
            //do other stuff.
         });
    

    如果您确实必须触发一个临时任务,但实际上可以使用 run...您可以使用带有任务名称的.start,并附加到task_stop 处理程序以在任务完成时触发某些东西。这在为 gulp 任务编写测试时很好,但就是这样。

    但是在日常 gulp 使用中,这是一种反模式。

    通常,您构建较小的任务并组合它们。这是正确的方法。看到这个:

    var gulp = require('gulp'),
        runSequence = require('run-sequence');
    
    function a(){
      //gulpstuff
    } 
    function b(){
      //gulpstuff
    }
    
    function d(callback){
      runSequence('a', 'b', callback)
    }
    
    gulp
        .task('a', a) // gulp a -runs a
        .task('b', b) // gulp b runs b
        .task('c', ['a', 'b']) //gulp c runs a and b at the same time
        .task('d', d); //gulp d runs a, then b.
    

    基本上,如果 c 或 d 是一个监视任务,您将实现相同的目标,即在没有 .run 的情况下触发已注册的较小 gulp 任务

    【讨论】:

      【解决方案2】:

      gulp.run() 已被弃用,因为人们将其用作拐杖。你把它当拐杖了!

      我不确定您为什么使用gulp-watch,内置的gulp.watch 会更适合您的用途。查看 .watch 的文档:https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpwatchglob--opts-tasks-or-gulpwatchglob--opts-cb

      这是你应该写的。 理解你为什么要使用它而不是仅仅复制它:

      gulp.watch(['public/**/*.js','!public/**/*.min.js'], ['compressjs', 'bs-reload'])
      

      【讨论】:

      • 感谢您的回答。我知道使用gulp.watch 时,可以像您的回答一样完成。但我使用的是gulp-watch。我使用gulp-watch 的原因是因为gulp.watch 不监视新文件或删除文件,因为我的经验和在这里找到:stackoverflow.com/questions/22391527/… 那么,我怎么能不在这里为我的gulp-watch 使用gulp.run
      • 这会中断。它忽略了第一个依赖项中的依赖项。
      【解决方案3】:

      您总是可以只使用普通的旧 javascript 函数。从我读过的内容来看,这被认为是一种更“gulp-ish”的做事方式。

      我曾经遇到过类似的情况,基本上是这样解决的:

      var watch = require('gulp-watch');
      watch(['public/**/*.js','!public/**/*.min.js'], function(){
          compress();
          bsReload();
      });
      

      然后这些函数基本上是您最初的 gulp 任务的核心包装:

      var compress = function () {
        return gulp.src("stuff/**")
                .pipe(gulp-compress())
                .pipe(gulp.dest("./the_end/");
      };
      

      很容易陷入这样一种想法,即必须对所有事情都使用 gulp 任务,否则你就是“做错了”,但如果你需要使用类似的东西,那就去做吧。

      如果您还想要一个具有相同功能的 gulp 任务,那么请编写如下内容:

      gulp.task("compress", function () {
        return compress();
      });
      

      如果您需要在其他地方使用相同的代码,您仍然可以利用 gulp 任务依赖项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-15
        • 2021-09-07
        • 1970-01-01
        相关资源
        最近更新 更多