这是一个组合任务,我不知道如何用任务依赖项替换它。
...
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]
答案 0 :(得分:86)
或者你可以这样做:
gulp.start('task1', 'task2');
答案 1 :(得分:80)
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']);
});
您不再需要传递函数(尽管您仍然可以)来运行任务。您可以为监视提供一系列任务名称,它将为您完成此任务。
答案 2 :(得分:25)
来源: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();
});
答案 3 :(得分:12)
请原谅我复活旧问题。接受的答案没有解决在设置手表之前运行任务的问题。下一个答案使用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);
我是gulp的新手。如果我忽略了一些显而易见的事情,请告诉我。
答案 4 :(得分:5)
正如@dman提到的那样,gulp.start
将在下一个版本中被丢弃。它也可以在this issue of gulp中看到。
在@Pavel Evstigneev答案的评论中,@ joemaller提到我们可以在这种情况下使用run-sequence。
但请注意,run-sequence的作者说:
这是一个临时的解决方案,直到gulp 4.0发布,它支持串行或并行定义任务依赖。
请注意,此解决方案是一种黑客攻击,可能会停止使用未来的更新来进行吞咽。
所以,在gulp 4.0之前,我们可以使用 run-sequence ,在4.0之后,我们可以使用gulp。
答案 5 :(得分:5)
gulp.parallel('taskName1', 'taskName2')()
gulp.series('taskName1', 'taskName2')()
我喜欢gulp4!
答案 6 :(得分:3)
如果您需要维护正在运行的任务的顺序,您可以按照here所述定义依赖关系 - 您只需要从依赖项返回流:
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'任务将是依赖项,你将拥有另一个依赖于它们的任务'服务器' )。不需要任何黑客攻击。
答案 7 :(得分:1)
要在开始观看之前运行任务,而不是使用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/'));
或者你可以将后一个代码包装在" normal"功能,并随时调用它。
答案 8 :(得分:1)
在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('...'));
});
答案 9 :(得分:0)
我仍然没有看到这实际上是如何解决手头的问题。
如果我有4个任务,它们之间定义了依赖关系
A,B,C,d
其中A依赖于gulp.task('A',['B'],function A(){});
定义的B等,然后我使用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运行或等效停留一段时间