这是一个组合任务,我不知道如何用任务依赖项替换它.
... 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]
请原谅我复活旧问题.接受的答案没有解决在设置手表之前运行任务的问题.下一个答案使用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);
我是新来的.如果我忽略了一些显而易见的事情,请告诉我.
来源: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提到的那样,gulp.start
将在下一个版本中被丢弃.也可以在这个gulp问题中看到.
在@Pavel Evstigneev答案的评论中,@ joemaller提到我们可以在这种情况下使用run-sequence.
但请注意,run-sequence的作者说:
这是一个临时解决方案,直到gulp 4.0发布,它支持串行或并行定义任务依赖.
请注意,此解决方案是一个黑客攻击,并可能会停止使用未来的更新gulp.
所以,在gulp 4.0之前,我们可以使用run-sequence,在4.0之后,我们可以使用gulp.
口香糖4
gulp.parallel('taskName1', 'taskName2')() gulp.series('taskName1', 'taskName2')()
我喜欢gulp4!
或者你可以这样做:
gulp.start('task1', 'task2');
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']); });
您不再需要传递函数(尽管您仍然可以)来运行任务.您可以为监视提供一系列任务名称,它将为您执行此操作.