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

这是一个复杂的任务,我不知道如何将它replace为任务依赖关系。

... 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 [deprecate gulp.run]

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

你不再需要传递一个函数(尽pipe你仍然可以)来运行任务。 你可以看一组任务名称,它会为你做这个。

或者你可以这样做:

 gulp.start('task1', 'task2'); 

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

gulp.start()从来就不是一个公共API,也没有使用过。 正如上面在评论中所述,任务pipe理在下一个版本中被replace….所以gulp.start()将被打破。

咕噜咕噜devise的真正意图是定期做出Javascript的function,并且只做调用它们的任务。

例:

 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(); }); 

原谅我复活一个老问题。 接受的答案没有解决在设置手表之前运行任务的问题。 下一个答案使用gulp.start即将离开。 第三个答案指出应该使用正则函数,但是这个例子看起来很奇怪。 我做了一些search,但没有find一个简单的例子。

这是我的解决scheme。 这个想法是定义常规的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); 

我是新来的吞咽。 请让我知道,如果我忽略了一些明显的东西。

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

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

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

这是一个临时解决scheme,直到发布支持以串行或并行方式定义任务依赖关系的gulp 4.0。

请注意,这个解决scheme是一个破解,并可能会停止工作,未来更新吞噬。

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

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

 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运行(例如,你的'茉莉花'和'embedded'任务将依赖关系,你会有另一个任务'服务器',将依赖于他们)。 不需要任何黑客。

在开始观察之前运行一个任务,而不是使用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/')); 

或者,您可以将后面的代码封装在“正常”函数中,并随时调用它。

– 从类似的线程的这个答案的启发。

我仍然没有看到这是如何真正解决手头的问题。

如果我有4个任务与他们之间定义的依赖关系

A B C D

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

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

 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失败,它将永远不会进入任务(想到编译或testing错误)

或者我可以写2)

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

它不会运行A-> D,直到首先改变了某些东西。

或者我可以写3)

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

这会造成依赖关系层次结构的重复(以及随时间的错误)。

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

所以我希望一口气运行或一些等价的停留一段时间

吞噬4

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

我喜欢gulp4!