簡體   English   中英

通過gulp.src傳遞concat更改gulp.src glob

[英]Piping concat through gulp.src changes gulp.src glob

我對gulp還是很陌生,所以對我來說這可能是一個誤解。

我正在嘗試創建gulp管道,該管道的功能如下:

gulp.src('src/**/*.html')
    .pipe(html2js({some:options}))
    .pipe(concat('templates.js'))
    .pipe(gulp.src('src/**/*.js'))
    .pipe(uglify())
    .pipe(gulp.dest('build/'))

但是,當我運行此命令時,第二個glob無法捕獲所有.js文件。 如果我按照以下方式運行兩個獨立的管道:

gulp.src('src/**/*.html')
    .pipe(html2js({some:options}))
    .pipe(concat('template.js'))
    .pipe(gulp.dest('build/'));

gulp.src(['src/**/*.js', 'build/template.js'])
    .pipe(uglify())
    .pipe(gulp.dest('build/'));

它按預期工作。 似乎沒有引發任何錯誤,在第一種情況下,template.js被添加到文件列表的末尾,正如我期望的那樣。

任何建議將不勝感激。

您應該檢查gulp-merge 它旨在結合gulp管道:

var gulpMerge = require('gulp-merge');

gulp.task('build', function() {
    return gulpMerge(
        gulp.src('src/**/*.html')
            .pipe(html2js({some:options}))
            .pipe(concat('template.js')),

        gulp.src('src/**/*.js')
    )
    .pipe(uglify())
    .pipe(gulp.dest('build/'));
});

Gulp.src接受一個glob和options,因此它無法處理在第一個示例腳本中傳遞給它的流。

您可以使用類似於第一個使用gulp-filter的方法

var filter = gulpFilter('**/*.html');
gulp.src(['src/**/*.html', 'src/**/*.js'])
    .pipe(filter)
    .pipe(html2js({some:options}))
    .pipe(concat('templates.js'))
    .pipe(filter.restore())
    .pipe(uglify())
    .pipe(gulp.dest('build/'))

否則,按照第二個示例的代碼,可以在丑陋之前使用merge-stream合並流:

var merge = require('merge-stream');

var htmlStream = gulp.src('src/**/*.html')
    .pipe(html2js({some:options}))
    .pipe(concat('template.js'));

return merge(htmlStream, gulp.src('src/**/*.js'))
    .pipe(uglify())
    .pipe(gulp.dest('build/'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM