Gulp运行的替代方案

4
每次我运行 gulp,都会看到这个消息:gulp.run()已经过时。请使用任务依赖或gulp.watch任务触发代替。 示例代码:
var watch = require('gulp-watch');
watch(['public/**/*.js','!public/**/*.min.js'],function(){
    gulp.run('compressjs');
    gulp.run('bs-reload');
});

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

3个回答

3

不应该使用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

您可以始终使用普通的 JavaScript 函数。根据我的阅读,这被认为是一种更“gulp式”的做法。

我曾经遇到过类似的情况,基本上用以下方式解决了它:

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任务依赖。


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'])

3
谢谢您的回答。我知道使用 gulp.watch 可以像您的答案那样完成。但是我正在使用 gulp-watch。我使用 gulp-watch 的原因是因为根据我的经验和在这里找到的内容,gulp.watch 不会监视新文件或已删除的文件:https://dev59.com/bmEh5IYBdhLWcg3wdjPt 那么,在这里如何不使用 gulp.run 来运行我的 gulp-watch - user1995781
这会导致错误。它忽略了第一个依赖项中的依赖关系。 - Oliver Dixon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接