2016-03-25 9 views
1

ich meinen Gulp Build-Prozess Refactoring, damit der Benutzer nicht V=1.2.88 usw. ich den Benutzer möchteGulp: Wie man Ordnername liest?

Vielmehr eingeben muss nur major gulp build, minor gulp build oder patch gulp build einzugeben. Was würde dann natürlich die Versionsnummer wiederholen.

Dafür aber arbeiten muss ich schlucke den Ordnernamen des letzten Build erstellt zu lesen:

enter image description here

Meine Aktuelle Gulp Aufgabe, die die Versionsnummer erzeugt:

var version = ''; 
var env = process.env.V; // V={version number} ie: V=1.0.1 gulp build 

gulp.task('version', function() { 
    return printOut(env); 
}); 

function errorlog(err) { 
    console.log(err.message); 
    this.emit('end'); 
} 

function printOut(ver) { 
    gutil.log(gutil.colors.blue.bold('Last build: '+paths.last)); 
    version = ver; 
    if (version === undefined) { 
     version = '0.0.0'; 
    } 
    gutil.log(gutil.colors.blue.bold('##################################################')); 
    gutil.log(gutil.colors.blue.bold('   Building Dashboard version '+version)); 
    gutil.log(gutil.colors.green.bold('~~   All change is detectable   ~~')); 
    gutil.log(gutil.colors.blue.bold('##################################################')); 
} 

Jedermann wissen, wie man das in Gulp schafft?

Das ist, was ich bisher Gulp-folders

So mit dem Gulp-folders Plugin fand ich die folgende Aufgabe geschaffen, die erste läuft:

gulp.task('build:getLastBuild', folders(paths.lastBuild, function(folder) { 
    console.log('Last version number is: '+folder); 
    return lastVersion = folder; 
    //This will loop over all folders inside pathToFolder main, secondary 
    //Return stream so gulp-folders can concatenate all of them 
    //so you still can use safely use gulp multitasking 
    // return gutil.colors.blue.bold('Last build folder: '+folder); 
    // return gulp.src(path.join(paths.lastBuild, folder)) 
    //  .pipe(console.log(' Getting last version number: '+folder)) 
    //  .pipe(lastVersion = folder); 
})); 

Nun, wenn ich mein Körperbau laufen, es unten überprüfen ! Ich erhalte den Namen des Ordners, in den console.log, aber meine Prozessfehler aus :(

TypeError: e.pipe is not a function

enter image description here

+0

Ich verstehe nicht, die Beziehung zwischen „lesen Sie die Ordnernamen“ und Ihre Build-Task. Allerdings denke ich, du solltest 'yargs' (https://www.npmjs.com/package/yargs) verwenden, damit du so etwas wie 'gulp - major 2.2.2 build' machen kannst. Wenn major die neueste Version ist, müssen Sie vielleicht nur das 'path' Modul des Knotens verwenden, mit einer Sortierfunktion, um die neueste Version zu finden. – cl3m

+0

Nun, die Idee ist sicherzustellen, dass die Benutzer KEINE Versionsnummer kennen oder eingeben müssen. Ich möchte den Namen des Ordners lesen, in meinem Beispiel oben: '1.2.8' Und dann, wenn es' Major' ist 1 + 1, oder 'Minor' 2 + 1 etc ... –

+0

Was ist mit https: //? www.npmjs.com/package/semver-utils um die Version zu überprüfen und 'fs.readdir()' oder 'fs.readdirSync()' um die Verzeichnisse zu lesen? – cl3m

Antwort

2

I'don't genau den Teil über das kleine/Majors, aber in Bezug auf die Liste der Verzeichnisse, können Sie folgendes tun:

var fs = require('fs'), 
    gulp = require('gulp'); 

gulp.task('default', function() { 
    var dirs = fs.readdirSync('./build/assets'); 
    console.log(dirs); 
    // do something with your directories 
}) 

// and the async version: 
gulp.task('async', function() { 
    var dirs = []; 
    var print = function(err, files) { 
     // do something with your directories 
     console.log(files) 
    }; 

    fs.readdir('./build/assets', print); 
}) 
+0

Ok ja das ist genau, wie ich es gelöst habe :) Überprüfen, aber da ich 2 Ordner in meinem 'Build/Assets' habe, musste ich meinen Code unten einchecken, um zu vermeiden, über den' statischen' Ordner zu iterieren. –

1

Verstanden Obwohl zugeben, dass ich es ein wenig rau ist, gegoogelt ich Knoten readdir und __dirname console.log(__dirname);

gefunden

Also mit diesem, habe ich die Variablen und Aufgabe unter:

var fs = require('fs'), 
    path = require('path'); 

gulp.task('build:getLastBuild', function() { 
    return fs.readdirSync(paths.lastBuild).filter(function(file) { 
     console.log(' build:getLastBuild: '+file); 
     if (file != 'static') { 
      lastVersion = file; 
     } 
     else { 
      console.log(' lastVersion: '+lastVersion); 
     } 
    }); 
}); 

Also das jetzt bekommen! Jetzt habe ich eine Zeichenfolge, die ich manipulieren kann, um die Versionsnummer zu erhöhen, wenn Benutzer den Build-Prozess ausführen.

enter image description here

+0

Ahh, ich war zu langsam um meine Antwort zu posten: S. Gut gemacht ;) – cl3m