【问题标题】:Pass data between gulp tasks without writing to disk在 gulp 任务之间传递数据而不写入磁盘
【发布时间】:2015-09-27 10:04:14
【问题描述】:

我正在尝试注释和缩小 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


    【解决方案1】:

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

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

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

    【讨论】:

    • 哎呀——这真的很复杂。让我觉得我以某种方式错误地看待问题?
    • 为什么复杂?非常直接和优雅。您始终可以按照您的建议将其保存在中间目录中,但它可能会更慢。此外,您可以在其之上构建抽象以使事情变得更容易。无论如何,这样您就可以在任务之间“通信”(数据),而无需将实际数据保存在 fs 中。
    • 好吧,我可能会再试一次,但现在我看到 ng-annotate + systemjs 也有点繁琐。生活在最前沿...
    【解决方案2】:

    npm 上的yargs 包导出对象argv,这是命令行参数的一种非常巧妙的表示。例如调用

    gulp -a test -b 123 my-task
    

    在运行期间由带有值的参数argv 表示

    { a: 'test', b: 123 }
    

    它被传递给 gulp 任务 my-task 以及之前的所有前辈。

    如果其中一个前辈给argv分配了一个新的道具

    argv.newProp = 'newValue'
    

    此道具将可供其所有后继者使用,包括您真正想要执行的任务。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多