2016-11-14 2 views
1

Mein Ziel ist es, die Binärdateien hier zu finden und sie in das erste Unterverzeichnis in exe anzuordnen.Pfad von gulp.dest ändern

src 
├── exe 
│ └── nix 
│  └── binary.out 
│  └── blah 
│ └── mac 
│  └── binary.out 
│  └── blah 
│ └── win 
│  └── src 
│   └── trigger 
│    └── trigger 
│     └── trigger 
│      └── binary.exe 
│     └── Debug 

Mein Ziel ist nur die binären Dateien in dist/exe wie diese zu kopieren:

dist 
├── exe 
│ └── nix 
│  └── binary.out 
│ └── mac 
│  └── binary.out 
│ └── win 
│  └── binary.exe 

vereinfacht My (in Wirklichkeit ist es mehr Müll, mehr subdirs hat) diese Ordnerstruktur ist Dies ist der Code, den ich gerade benutze:

var path = require('path'); 

gulp.src(['src/exe/**/*.out', 'src/exe/**/*.exe']) 
    .pipe(gulp.dest(function(file) { 
    var os = file.path.match(/(?:win|mac|nix)/)[0]; 
    return 'dist/exe/' + os + '/' + path.basename(file.path); 
    })); 

Dies ist jedoch immer noch kopieren g die Struktur auch nach dem Namen des Betriebssystems. Es ist wie es die **/ Sachen nach meiner zurückgegebenen Zeichenfolge anfügt. Gibt es eine Möglichkeit, dies nicht zu tun?

Antwort

2

Es hängt das **/Zeug nach meiner zurückgegebenen Zeichenfolge. Gibt es trotzdem, um es nicht zu tun

Ja, das ist genau das, was es tut und es ist beabsichtigt. Alles, was vor der ** ist, wird als Basispfad behandelt, alles nach dem Pfad, der beim Schreiben der Datei in das Zielverzeichnis verwendet wird. (Siehe this answer, wenn Sie mehr wissen möchten).

Normalerweise könnte man die base option in gulp.src() verwenden, um dies zu ändern, aber das ist wirklich nicht in Ihrem Fall arbeiten, da Sie einen Basispfad nix/mac und ein anderes für win für benötigen würden.

Darüber hinaus verwenden Sie gulp.dest() falsch. gulp.dest() gibt das Ziel Verzeichnis an. Sie versuchen, es zu verwenden, um ein Ziel Datei anzugeben. Das ist nicht möglich.

Die einfachste Lösung für Sie ist gulp-rename zu verwenden:

var path = require('path'); 
var rename = require('gulp-rename'); 

gulp.src(['src/exe/**/binary.{exe,out}']) 
    .pipe(rename(function(file) { 
    file.dirname = file.dirname.split(path.sep)[0]; 
    })) 
    .pipe(gulp.dest('dist/exe')); 
+0

Danke Sven für eine so große Antwort! Ich habe wirklich viel daraus gelernt und eine Lösung gefunden! gulp-rename macht den Trick! Sehr interessant, was ich auch gelernt habe, ist das '{exe, out}', danke! – Noitidart

+0

Durch Zufall können Verzeichnisse verwerfen umbenennen? Gerade jetzt bekomme ich die Binärdatei im 1. Unterverzeichnis, aber ich bekomme auch leere Ordner daneben. – Noitidart

+1

Nein, es kann Verzeichnisse nicht vollständig verwerfen, nur den Pfad ändern. Aber du solltest sowieso nicht mit leeren Verzeichnissen enden, zumindest dann nicht, wenn deine 'gulp.src()' nur die 'binary' Dateien auswählt. –