如何通过管道传输到 Gulp 中的另一个任务?
Posted
技术标签:
【中文标题】如何通过管道传输到 Gulp 中的另一个任务?【英文标题】:How to pipe to another task in Gulp? 【发布时间】:2014-06-20 22:13:11 【问题描述】:我尝试干燥我的 gulpfile。在那里,我有一些我不满意的代码重复。怎样才能做得更好?
gulp.task('scripts', function()
return gulp.src('src/scripts/**/*.coffee')
.pipe(coffeelint())
.pipe(coffeelint.reporter())
.pipe(coffee())
.pipe(gulp.dest('dist/scripts/'))
.pipe(gulp.src('src/index.html')) // this
.pipe(includeSource()) // needs
.pipe(gulp.dest('dist/')) // DRY
);
gulp.task('index', function()
return gulp.src('src/index.html')
.pipe(includeSource())
.pipe(gulp.dest('dist/'))
);
我把index
作为一个单独的任务,因为我需要观看src/index.html
才能重新加载。但我也在关注我的.coffee
来源,当它们发生变化时,我也需要更新src/index.html
。
如何在scripts
中通过管道连接到index
?
【问题讨论】:
How to run Gulp tasks synchronously/one after the other的可能重复 【参考方案1】:gulp
使您能够根据参数对一系列任务进行排序。
例子:
gulp.task('second', ['first'], function()
// this occurs after 'first' finishes
);
试试下面的代码,你将运行任务'index'来运行这两个任务:
gulp.task('scripts', function()
return gulp.src('src/scripts/**/*.coffee')
.pipe(coffeelint())
.pipe(coffeelint.reporter())
.pipe(coffee())
.pipe(gulp.dest('dist/scripts/'));
);
gulp.task('index', ['scripts'], function()
return gulp.src('src/index.html')
.pipe(includeSource())
.pipe(gulp.dest('dist/'))
);
任务index
现在需要在运行其函数内的代码之前完成scripts
。
【讨论】:
我会尽快尝试这种方法。 如果scripts
会运行,并且需要在scripts
之后运行index
会怎样?
我更喜欢使用run-sequence
来编排我的任务,所以总的来说这个解决方案是正确的 - 将重复作业分离到自己的 gulp.task 中。
@vsync 那么您将创建一个调用 index 的任务,其调用方式与 index 调用脚本的方式相同。它将很好地链接在一起,因此您只能从控制台调用一项任务。在这种情况下'gulp index'
将流保存到磁盘以在另一个任务中加载它?这种模式看起来比“gulpy”更“笨拙”。【参考方案2】:
如果您查看 Orchestrator 源代码,尤其是 .start()
实现,您会发现如果最后一个参数是一个函数,它会将其视为回调。
我为自己的任务编写了这个 sn-p:
gulp.task( 'task1', () => console.log(a) )
gulp.task( 'task2', () => console.log(a) )
gulp.task( 'task3', () => console.log(a) )
gulp.task( 'task4', () => console.log(a) )
gulp.task( 'task5', () => console.log(a) )
function runSequential( tasks )
if( !tasks || tasks.length <= 0 ) return;
const task = tasks[0];
gulp.start( task, () =>
console.log( `$task finished` );
runSequential( tasks.slice(1) );
);
gulp.task( "run-all", () => runSequential([ "task1", "task2", "task3", "task4", "task5" ));
【讨论】:
以上是关于如何通过管道传输到 Gulp 中的另一个任务?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 find 命令返回的文件列表通过管道传输到 cat 以查看所有文件
如何使用 Perl 将输入通过管道传输到 Java 应用程序?