无需写入磁盘即可在gulp任务之间传递数据

问题描述 投票:3回答:2

我正在尝试注释和缩小systemjs角度项目。 Systemjs带有一个构建函数,但它不是'gulp-aware'。有可能通过构建器缩小选项,但没有一个用于ng-annotate,所以我需要gulp为我做两个。

gulp.task('bundle', function () {
    var options = {}
    builder.buildStatic('./assets/app/app.js', options)
    .then(function(data) {
        console.log("then called");
        // make data available for another task            
    });

如何将上述内容与之结合起来

gulp.task('productionApp', function() {
    return [source the output from 'bundle']
    .pipe(ngannotate())
    .pipe(uglify())
    .pipe(gulp.dest('./dist'));
});

我可以将第一个任务输出到一个文件,然后输入.src,但这不是最好的方法吗?

angularjs gulp systemjs ng-annotate
2个回答
1
投票

最简单的方法是将其保存在缓冲区(实际上是一个简单的对象)中,然后像使用src一样制作流并继续。

Gulp的存储库包含recipe它是如何完成的。

注意:你应该让所有那些load-*任务在一开始就运行,你可以使用run-sequence,或者将它们作为“真实”任务的依赖项。


0
投票

npm上的yargs包导出了对象argv,它是命令行参数的一个非常聪明的表示。例如,调用

gulp -a test -b 123 my-task

在运行期间由param argv表示值

{ a: 'test', b: 123 }

这是传递给gulp任务my-task,并在它之前传递给它的所有前辈。

如果其中一位前任为argv分配新的道具

argv.newProp = 'newValue'

这个道具将面向所有接班人,包括你真正想要执行的任务。

指令const { argv } = require('yargs')将放在gulpfile的开头,并且可以使用别名和默认值进行丰富。参考是here

© www.soinside.com 2019 - 2024. All rights reserved.