2016-04-14 16 views
7

Mein schluck Code wie folgt aussieht, teilgulp.dest nicht zu schaffen Zielordner

gulp.src(['../application-base/**/**.js', '!../application-base/assets/**/**.js'], { base: './' }) 
    .pipe(gulpPlumber({ 
     errorHandler: function (error) { 
      console.log(`\nError ${error}`); 
      this.emit('end'); 
     } 
    })) 
    .pipe(gprint(filePath => "Transpiling: " + filePath.replace('..\\application-base\\', ''))) 
    .pipe(babel({ compact: false })) 
    .pipe(gulp.dest('../application-base-transpiled/')) 
    .on('end',() => done()); 

Wenn ich

.pipe(gulp.dest('../application-base-transpiled/'))

zu

.pipe(gulp.dest(''))

dann die Änderung Die transpilierten Dateien werden erstellt und überschreiben die Originale. Das Problem ist, dass

.pipe(gulp.dest('../application-base-transpiled/'))

die Datei nicht speichern, mit dem gleichen ursprünglichen Pfad, unter application-base-transpiled

Wie Sie sehen können, habe ich eine Basis verwende, die sonst scheint zu funktionieren.

Was fehlt mir?

EDIT

Ich schaute genauer, und es scheint auch mit

.pipe(gulp.dest('../application-base-transpiled/'))

Gulp noch die transpiled Dateien in den ursprünglichen Ort platziert, überschreiben das Original. Es gibt etwas an dem Ziel, das ich passiere, das Gulp nicht mag, und ignoriert still.

EDIT 2

Es Entfernen die base Option scheint löst dieses Problem, im Gegensatz ich zu beraten habe an anderer Stelle gesehen. Die Dokumente für gulp.dest diskutieren das nicht wirklich.

Kann mir jemand einen Einblick geben?

EDIT 3

Per Sven Antwort, habe ich versucht, diese

gulp.src(['**/**.js', '!assets/**/**.js'], { base: '../application-base' }) 
    .pipe(gulpPlumber({ 
     errorHandler: function errorHandler(error) { 
      console.log('\nError ' + error); 
      this.emit('end'); 
     } 
    })) 
    .pipe(gprint(filePath => "Transpiling: " + filePath.replace('..\\application-base\\', ''))) 
    .pipe(babel({ compact: false })) 
    .pipe(gulp.dest('../application-base-transpiled/')) 
    .on('end',() => done()); 

Aber es scheint die Basis ignoriert wird, und die Dateien aus meinem eigenen aktuellen Verzeichnis werden gepackt und transpiled an Ort und Stelle (das letzte, was ich will - glücklicherweise war GIT hilfreich bei der Beseitigung des Schadens).

Wird der Basisparameter ignoriert, wenn ein Array für src verwendet wird?

+0

Es ist wirklich komisch, können Sie versuchen './../ Application-Base-transpiled'? Die '{base: './'}' sagt gulp den gesamten relativen Pfad zu erhalten. –

+0

@Tom - zum Glück hatte das keinen Effekt - wäre * wirklich * bizarr gewesen, wenn es so wäre. –

Antwort

5

In gulp Strömen der Zielpfad einer Datei diese pseudo-Gleichung folgt:

gulp.dest + (gulp.src ohne base führt) = dest Pfad der Datei

Beispiel:

gulp.src('src/js/foo.js', {base:'src/'}).pipe(gulp.dest('dist/')); 

Ergebnis:

'dist/' + ('src/js/foo.js' ohne 'src/' führenden) = 'dist/js/foo.js'

In Ihrem Fall:

'../application-base-transpiled/' + ('../application-base/foo/bar.js' ohne führende './') = '../application-base-transpiled/../application-base/foo/bar.js'

So Ihre Dateien landen im ursprünglichen Verzeichnis auf.

Sie müssen {base: '../application-base/'} an gulp.src() übergeben, damit Ihr Beispiel funktioniert.


HINWEIS

Sie müssen noch '../application-base/' in Ihrem src Pfad schließen. Der Zweck von base ist, den Zielpfad zu manipulieren, nach meiner obigen Gleichung; es tut nicht dienen dem Zweck der Verringerung der Anzahl der Tastenanschläge, die Sie in gulp.src eingeben. So ist das Endergebnis

so etwas wie dieses

gulp.src(['../application-base/**/**.js'], { base: '../application-base' }) 
     .pipe(gulpPlumber({ 
      errorHandler: function errorHandler(error) { 
       console.log('\nError ' + error); 
       this.emit('end'); 
      } 
     })) 
     .pipe(gprint(filePath => "Transpiling: " + filePath.replace('..\\application-base\\', ''))) 
     .pipe(babel({ compact: false })) 
     .pipe(gulp.dest('../application-base-transpiled')) 
     .on('end',() => done()); 
sein sollte Wenn Sie nicht gesetzt haben passieren ein base option zu gulp.src() ein Standard:

Standard: alles vor einem glob beginnt (siehe glob2base)

Was das bedeutet ist, dass alles bis auf die ersten ** oder * in dem Muster, das Sie an gulp.src() übergeben, wird als base Option verwendet. Da Ihr Muster ist, wird Ihre base -Option automatisch ../application-base/.

+0

Dank @Sven - wird "base" ignoriert, wenn Sie src ein Array oder etwas übergeben? Das ist, was ich sehe, per meinem letzten Update –

+0

Ah - nm - Ich denke, ich sehe –

+0

check out die Bearbeitung, die ich zu Ihrer Antwort hinzugefügt. Kannst du mir bestätigen, dass ich nichts falsches geschrieben habe (nur editieren, wenn es so ist)? Ansonsten akzeptiere ich diese Antwort. Vielen Dank für Ihre Hilfe –

Verwandte Themen