gulp.run已弃用。我如何撰写任务?

javascript gulp

89917 观看

10回复

3003 作者的声誉

这是一个组合任务,我不知道如何用任务依赖项替换它。

...
gulp.task('watch', function () {
 var server = function(){
  gulp.run('jasmine');
  gulp.run('embed');
 };
 var client = function(){
  gulp.run('scripts');
  gulp.run('styles');
  gulp.run('copy');
  gulp.run('lint');
 };
 gulp.watch('app/*.js', server);
 gulp.watch('spec/nodejs/*.js', server);
 gulp.watch('app/backend/*.js', server);
 gulp.watch('src/admin/*.js', client);
 gulp.watch('src/admin/*.css', client);
 gulp.watch('src/geojson-index.json', function(){
  gulp.run('copygeojson');
 });
});

相应的更改日志 https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#35 [弃用gulp.run]

作者: toutpt 的来源 发布者: 2014 年 2 月 20 日

回应 (10)


80

1586 作者的声誉

决定
gulp.task('watch', function () {
  var server = ['jasmine', 'embed'];
  var client = ['scripts', 'styles', 'copy', 'lint'];
  gulp.watch('app/*.js', server);
  gulp.watch('spec/nodejs/*.js', server);
  gulp.watch('app/backend/*.js', server);
  gulp.watch('src/admin/*.js', client);
  gulp.watch('src/admin/*.css', client);
  gulp.watch('src/geojson-index.json', ['copygeojson']);
});

您不再需要传递函数(尽管您仍然可以)来运行任务。您可以为监视提供一系列任务名称,它将为您执行此操作。

作者: Contra 发布者: 20.02.2014 11:28

86

2920 作者的声誉

或者你可以这样做:

gulp.start('task1', 'task2');
作者: Pavel Evstigneev 发布者: 25.04.2014 04:48

25

4647 作者的声誉

来源:https//github.com/gulpjs/gulp/issues/755

gulp.start()从来没有打算成为一个公共api也不会被使用。正如上面评论中所述,任务管理正在下一个版本中被替换....所以gulp.start()将会破坏。

gulp设计的真正目的是制作常规的Javascript函数,并且只进行调用它们的任务。

例:

function getJsFiles() {
    var sourcePaths = [
        './app/scripts/**/*.js',
        '!./app/scripts/**/*.spec.js',
        '!./app/scripts/app.js'
    ];

    var sources = gulp.src(sourcePaths, { read: false }).pipe(angularFilesort());

    return gulp.src('./app/index.html')
        .pipe(injector(sources, { ignorePath: 'app', addRootSlash: false }))
        .pipe(gulp.dest('./app'));
}  

gulp.task('js', function () {
    jsStream = getJsFiles();
});
作者: dman 发布者: 05.11.2014 10:03

12

36105 作者的声誉

请原谅我复活旧问题。接受的答案没有解决在设置手表之前运行任务的问题。下一个答案使用gulp.start即将消失。第三个答案指出应该使用常规函数,但示例似乎很奇怪。我做了一些搜索,但没有找到一个简单的例子。

这是我的解决方案。我们的想法是定义常规的js函数,然后将它们注册为任务。然后,如果需要或从手表中直接调用这些功能。

var 
  gulp     = require('gulp'),
  concat   = require('gulp-concat'),
  markdown = require('gulp-showdown')
;
var scriptFiles   = [ 'ang/app.js' ];
var markdownFiles = [ 'content/articles/*.md'];

var watchTask = function() 
{
  buildTask();

  gulp.watch(scriptFiles,  ['scripts' ]);
  gulp.watch(markdownFiles,['markdown']);
};
gulp.task('watch',watchTask);

var buildTask = function()
{
  scriptsTask();
  markdownTask();
};
gulp.task('build',buildTask);

var markdownTask = function() 
{
  gulp.src(markdownFiles)
    .pipe(markdown())
    .pipe(gulp.dest('web/articles'));
};
gulp.task('markdown',markdownTask);

var scriptsTask = function() 
{
  gulp.src(scriptFiles)
    .pipe(concat('app.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js',
      'bower_components/angular-route/angular-route.min.js'
    ])
    .pipe(concat('vendor.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js.map',
      'bower_components/angular-route/angular-route.min.js.map'
    ])
    .pipe(gulp.dest('web/js'));
};
gulp.task('scripts', scriptsTask);

我是新来的。如果我忽略了一些显而易见的事情,请告诉我。

作者: Cerad 发布者: 27.03.2015 04:14

1

868 作者的声誉

要在开始观察之前运行任务,而不是使用gulp.run()或gulp.start(),只需直接运行gulp命令。

所以代替:

var compress = function () {
    return gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));
};

做就是了:

gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));

或者您可以将后一个代码包装在“普通”函数中,并随时调用它。

- 灵感来自类似线程的答案

作者: bergie3000 发布者: 05.07.2015 08:38

3

548 作者的声誉

如果您需要维护正在运行的任务的顺序,您可以按照此处所述定义依赖项- 您只需要从依赖项返回流:

gulp.task('dependency', function () {
  return gulp.src('glob')
    .pipe(plumber())
    .pipe(otherPlugin())
    .pipe(gulp.dest('destination'));
});

定义依赖于它的任务:

gulp.task('depends', [ 'dependency' ], function () {
  // do work
});

并从手表中使用它:

gulp.task('watch', function () {
  watch('glob', [ 'depends' ]);
});

现在dependecy任务将在depends运行之前完成(例如,'jasmine'和'embed'任务将是依赖项,并且您将拥有另一个依赖于它们的任务'服务器')。不需要任何黑客攻击。

作者: Killah 发布者: 28.08.2015 09:55

5

1563 作者的声誉

正如@dman提到的那样,gulp.start将在下一个版本中被丢弃。也可以在这个gulp问题中看到。

在@Pavel Evstigneev答案的评论中,@ joemaller提到我们可以在这种情况下使用run-sequence

但请注意,run-sequence的作者说:

这是一个临时解决方案,直到gulp 4.0发布,它支持串行或并行定义任务依赖。

请注意,此解决方案是一个黑客攻击,并可能会停止使用未来的更新gulp。

所以,在gulp 4.0之前,我们可以使用run-sequence,在4.0之后,我们可以使用gulp。

作者: Qianyue 发布者: 24.12.2015 02:02

0

509 作者的声誉

我仍然没有看到这实际上是如何解决手头的问题。

如果我有4个任务,它们之间定义了依赖关系

A B C D

其中A依赖于定义的B等gulp.task('A',['B'],function A(){});,然后我使用gulp.watch定义了一个新任务,只运行这些函数会复制依赖关系。

例如,给定这些任务(每个任务函数通过名称公开):

function A(){}
gulp.task('A',['B'],A);

function A(){}
gulp.task('A',['B'],A);

function B(){}
gulp.task('B',['C'],B);

function C(){}
gulp.task('C',['D'],C);

function D(){}
gulp.task('D',[],D);

我可以写1)

gulp.task('WATCHER', ['A'], function(){
   ...
}

这将执行A-> D,但如果步骤B失败,它将永远不会进入任务(想想编译或测试错误)

或者我可以写2)

gulp.task('WATCHER', [], function(){
   gulp.watch(...,['A'])
}

在第一次更改某些内容之前,它不会运行A-> D.

或者我可以写3)

gulp.task('WATCHER', [], function(){
   D();
   C();
   B();
   A();
   gulp.watch(...,['A'])
}

这将导致依赖关系层次结构的重复(以及随时间的错误)。

PS:如果有人想知道为什么我希望我的监视任务执行,如果任何依赖任务失败,通常是因为我使用watch进行实时开发。例如。我开始我的手表任务开始进行测试等。可能是我开始的初始代码已经有问题因此错误。

所以我希望gulp运行或等效停留一段时间

作者: mgoetzke 发布者: 15.03.2016 02:27

3

31 作者的声誉

吞咽4

gulp.parallel('taskName1', 'taskName2')()
gulp.series('taskName1', 'taskName2')()

我喜欢gulp4!

作者: vomvoru 发布者: 20.03.2017 04:23

0

7052 作者的声誉

在Gulp 4中,似乎唯一对我有用的是:

gulp.task('watch', function() {
    gulp.watch(['my-files/**/*'], gulp.series('my-func'));
});

gulp.task('my-func', function() {
    return gulp.src('[...]').pipe(gulp.dest('...'));
});
作者: Jules Colle 发布者: 08.04.2019 07:34
32x32