2016-10-19 2 views
0

ID möchte den Benutzer vor der Ausführung der Hauptaufgabe build am unteren Rand auffordern. Ich habe mir eine schluckige Eingabe als Lösung angesehen, kann aber nicht herausfinden, wie ich sie implementieren kann, bevor irgendeine der Aufgaben ausgeführt wird. Ich möchte, dass der Benutzer die gesamte Aufgabe build abbrechen kann, bevor etwas ausgeführt wird. Ist das möglich? Irgendwelche Vorschläge würden sehr geschätzt werden.Aufforderung zum Schlucken vor dem Ausführen einer Task

nicht sicher, wie die .pipe(prompt.confirm())

gulp.src('test.js') 
    .pipe(prompt.confirm()) 
    .pipe(gulp.dest('dest')); 

hier zu implementieren, ist die gesamte schluck Datei

'use strict'; 

var gulp  = require('gulp'); 
var config = require('../config'); 
var concat = require('gulp-concat'); 
var unzip  = require('gulp-unzip'); 
var minimatch = require('minimatch'); 
var prompt = require('gulp-prompt'); 
var notify = require('gulp-notify'); 
var gutil  = require('gulp-util'); 

/** 
* Build Initial Project File Structure 
* Docs: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support 
* Order of Build: 
*  1. 'buildSass': Builds the ./sass directory in root 
*  2. 'buildFonts': Extracts the fonts from .zip and places them in ./fonts directory 
*  3. 'buildFontsCss': Extracts the fonts .css from .zip, concats all.css and places them in ./sass/typography/_fonts.scss directory 
*  4. 'buildJS': Builds the ./js directory in root 
*  5. 'moveCustomJSFiles': Places all js files (from wp _underscore theme) in proper directories 
*  6. run 'gulp build' in terminal to run all 5 tasks in the proper order and create the initial setup for your project 
*/ 

gulp.task('buildSass', function() { 
    var stream = gulp.src(config.build.sass.src) 
     .pipe(gulp.dest(config.build.sass.dest)) 
    return stream 
     .on('end', function(){ gutil.log(gutil.colors.bgGreen('buildSass Compiled Successfully!')); }); 
}); 

gulp.task('buildFonts', ['buildSass'], function() { 
    var stream = gulp.src(config.build.fonts.src) 
     .pipe(unzip({ 
      filter: function(entry) { 
       return minimatch(entry.path, config.build.fonts.include) 
      } 
     })) 
     .pipe(gulp.dest(config.build.fonts.dest)) 
    return stream 
     .on('end', function(){ gutil.log(gutil.colors.bgGreen('buildFonts Compiled Successfully!')); }); 
}); 

gulp.task('buildFontsCss', ['buildFonts'], function() { 
    var stream = gulp.src(config.build.fonts.css.src) 
     .pipe(unzip({ 
      filter: function(entry) { 
       return minimatch(entry.path, config.build.fonts.css.include) 
      } 
     })) 
     .pipe(concat(config.file.name.fontsSass)) 
     .pipe(gulp.dest(config.build.fonts.css.dest)) 
    return stream 
     .on('end', function(){ gutil.log(gutil.colors.bgGreen('buildFontsCss Compiled Successfully!')); }); 
}); 

gulp.task('buildJS', ['buildFontsCss'], function() { 
    var stream = gulp.src(config.build.js.src) 
     .pipe(gulp.dest(config.build.js.dest)) 
    return stream 
     .on('end', function(){ gutil.log(gutil.colors.bgGreen('buildJS Compiled Successfully!')); }); 
}); 

gulp.task('moveCustomJSFiles', ['buildJS'], function() { 
    var stream = gulp.src(config.build.copyJS.src) 
     .pipe(gulp.dest(config.build.copyJS.dest)) 
    return stream 
     .on('end', function(){ gutil.log(gutil.colors.bgGreen('moveCustomJSFiles Compiled Successfully!')); }) 
     .pipe(notify({ message: 'Project Build was successful! ✅', onLast: true })); 
}); 

gulp.task('build', ['buildSass', 'buildFonts', 'buildFontsCss', 'buildJS', 'moveCustomJSFiles']); 

// TODO: 
// put confirm before run 

Antwort

1

einen Blick auf readline-sync nehmen. Ich bin sicher, dass andere nicht zustimmen werden, aber Aufforderungen sind eines der Dinge, die oft besser funktionieren, wenn sie IMO synchron verwendet werden.

EDIT:

Hier ist, wie Sie es tun würde, basierend auf Ihren Code mit schluck v4:

const readlineSync = require('readline-sync'); 

gulp.task('build', gulp.series(
    function(done) { 
    if (readlineSync.keyInYN('Do you want to build?')) { 
     return done(); 
    } 
    console.log('Ok, not building.'); 
    process.exit(1); 
    }, 
    gulp.parallel(
    'buildSass', 
    'buildFonts', 
    'buildFontsCss', 
    'buildJS', 
    'moveCustomJSFiles' 
) 
)); 

Mit schluck Version < 4, können Sie das run-sequence Modul statt gulp.series verwenden:

const readlineSync = require('readline-sync'); 
const runSequence = require('run-sequence'); 
gulp.task('build-prompt', function(done) { 
    if (readlineSync.keyInYN('Do you want to build?')) { 
    return done(); 
    } 
    console.log('Ok, not building.'); 
    process.exit(1); 
}); 

gulp.task('build', function(callback) { 
    runSequence(
    'build-prompt', 
    [ 
     'buildSass', 
     'buildFonts', 
     'buildFontsCss', 
     'buildJS', 
     'moveCustomJSFiles' 
    ], 
    callback 
); 
}); 
+0

Ich denke, das ist genau das, was Im suchend aber es sieht aus wie Parallel- und Reihen werden nicht erkannt in Gulp 3. Ich habe nicht auf 4 noch aufgewertet. Diesen Fehler bekommen 'TypeError: gulp.parallel ist keine Funktion' – MoxDev

+0

Gotcha. Pre-v4 können Sie [run-sequence] (https://www.npmjs.com/package/run-sequence) anstelle von 'gulp.series' verwenden. Ich werde meine Antwort aktualisieren. – AndyPerlitch

+0

Sie sind erstaunlich, mein Freund arbeitet wunderbar! Danke für die readline-sync sync heads up Ich habe das Plugin vorher noch nicht benutzt! – MoxDev

0

https://www.npmjs.com/package/gulp-prompt

Ich habe das nicht selbst getestet, aber die Dokumentation zeigt an, dass Sie den Benutzer mit einer Bestätigungsmeldung wie "Weiter?" und dann weiterhin optional die Aufgabe oder nicht:

gulp.src('test.js') 
    .pipe(prompt.confirm({ 
     message: 'Continue?', 
     default: true 
    })) 
    .pipe(gulp.dest('dest')); 
+0

Danke Jake Ja, das funktioniert für eine normale Aufgabe, aber ich konnte nicht herausfinden, wie man es bei meiner Build-Aufgabe implementiert. Ich habe gelesen, dass diese Eingabeaufforderung nicht gut mit Streams funktioniert und ich habe die Aufgaben in einer bestimmten Reihenfolge ausgeführt. – MoxDev

Verwandte Themen