2016-05-06 5 views
0

Tout d'abord, voici une prise en pension par exemple très simple de mon problème: https://github.com/nkoder/example-of-gulp-less-zero-exit-on-errortâche Gulp-moins sorties avec zéro sur les styles invalides

Je veux définir pipeline de construction engouffreur qui échoue sur toute erreur. Ce pipeline serait utilisé dans un processus automatisé (par exemple, l'intégration continue), j'ai donc besoin de la commande build pour retourner le code de sortie différent de zéro en cas d'échec. Cela fonctionne pour moi avec des modèles Jade invalides ou des tests non-réussis exécutés avec Karma.

Le problème est lorsque j'utilise gulp-less pour préparer CSS à partir de MOINS. Chaque fois que j'ajoute une étape de pipeline après l'exécution gulp-less, toutes les erreurs sont "consommées" et la tâche entière se termine par 0. Mais ce ne devrait pas être le cas.

  • La première question est: Comment forcer wrong tâche à échouer avec le code de sortie non nul? (résolu, voir réponse ci-dessous)
  • La deuxième question est: Pourquoi error événement émis dans less() appel suivi par flux canalisé ne fait pas une tâche tout à retourner le code de sortie non nul? Non nul est retourné dans d'autres cas similaires, par exemple. en cas d'échec Jade ou ESLint. (Non encore résolu)

Versions:

    noeud
  • 5.11.0
  • npm 3.8.6
  • trait 3.9.1
  • trait-less 3.1.0

Répondre

1

Écoutez le error event, puis quittez le processus explicitement:

gulp.task('wrong', function() { 
    return gulp 
    .src('invalid-styles.less') 
    .pipe(less().on('error', function(error) { 
     console.log(error.message); 
     process.exit(1); 
    })) 
    .pipe(gulp.dest('generated-styles.css')); 
}); 
+0

Merci pour cette solution! Je ne suis pas un grand fan d'appeler 'process.exit (...)' explicitement mais si c'est la seule façon d'avoir 'fail()' échouer correctement, alors OK. – nkoder