Frage

Ich habe eine Gulp-Aufgabe, die eine Datei mit einer Lodash-Vorlage rendert und in meinem Build-Verzeichnis ablegt.ich benutze Schluck-Vorlage um das Rendering durchzuführen.

Zum korrekten Rendern muss meiner Vorlage eine Liste von Dateien aus meinem Build-Verzeichnis übergeben werden.Ich bekomme diese Liste mit Kugel.Da die Glob-API asynchron ist, bin ich gezwungen, meine Aufgabe so zu schreiben:

gulp.task('render', function() {
    glob('src/**/*.js', function (err, appJsFiles) {

        // Get rid of the first path component.
        appJsFiles = _.map(appJsFiles, function(f) {
            return f.slice(6);
        });

        // Render the file.
        gulp.src('src/template.html')
            .pipe(template({
                scripts: appJsFiles,
                styles: ['style1.css', 'style2.css', 'style3.css']
            }))
            .pipe(gulp.dest(config.build_dir));
    });
});

Das kommt mir unelegant vor.Gibt es eine bessere Möglichkeit, diese Aufgabe zu schreiben?

War es hilfreich?

Lösung

Der einfachste Weg, Ihr spezifisches Problem zu beheben, ist die Verwendung von Synchronmodus für Glob, der sich in den Dokumenten befindet, auf die Sie verlinkt haben.Geben Sie dann das Ergebnis von zurück gulp.src.

gulp.task('render', function() {
    var appJsFiles = _.map(glob.sync('src/**/*.js'), function(f) {
        return f.slice(6);
    });
    // Render the file.
    return gulp.src('src/template.html')
        .pipe(template({
            scripts: appJsFiles,
            styles: ['style1.css', 'style2.css', 'style3.css']
        }))
        .pipe(gulp.dest(config.build_dir));
});

Andere Tipps

Wenn Sie möchten, dass eine Aufgabe asynchron ausgeführt wird, nehmen Sie einen Rückruf an.

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top