Question

J'ai une tâche Gulp qui restitue un fichier contenant un modèle Lodash et le place dans mon répertoire de construction.j'utilise modèle gulp pour faire le rendu.

Pour un rendu correct, mon modèle doit recevoir une liste de fichiers de mon répertoire de construction.J'obtiens cette liste en utilisant globe.Puisque l'API glob est asynchrone, je suis obligé d'écrire ma tâche comme ceci :

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));
    });
});

Cela me semble inélégant.Existe-t-il une meilleure façon d’écrire cette tâche ?

Était-ce utile?

La solution

Le moyen le plus simple de résoudre votre problème spécifique est d'utiliser le mode synchrone pour glob, qui se trouve dans les documents auxquels vous avez lié.Renvoie ensuite le résultat de 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));
});

Autres conseils

Si vous voulez une tâche de fonctionner de manière asynchrone, prenez dans un rappel.

gulp.task('render', function(cb) {
    glob('src/**/*.js', function (err, appJsFiles) {
        if (err) {
            return cb(err);
        }

        // 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))
            .on('end', cb);
   });
});

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top