2016-04-14 16 views
7

Mój kod łyk wygląda tak, częściowogulp.dest nie tworząc folder docelowy

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()); 

jeśli zmienię

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

do

.pipe(gulp.dest(''))

wówczas transpiled pliki są tworzone i zastępują oryginały. Problemem jest to, że

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

nie zapisać plik, o takiej samej oryginalnej ścieżki, pod application-base-transpiled

Jak widać używam bazy, który wydaje się działać inaczej.

Czego mi brakuje?

EDIT

spojrzałem dokładniej, i wydaje się nawet z

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

Gulp wciąż umieszczenie transpiled pliki w oryginalnym miejscu, zastępując oryginał. Jest coś w mijanym przeze mnie tempie, którego Gulp nie lubi i ignoruje w milczeniu.

EDIT 2

Wydaje usuwania opcję base rozwiązuje ten problem, w przeciwieństwie do porad widziałem gdzie indziej. Dokumenty dla gulp.dest tak naprawdę nie omawiają tego.

Czy ktoś może się o tym przekonać?

EDIT 3

ODPOWIEDŹ W Svena, próbowałem ten

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()); 

Ale wydaje się, że baza jest ignorowany, a pliki z własnego katalogu bieżącym są chwycił i transpiled w miejscu (ostatnia rzecz, jakiej chcę - na szczęście GIT był pomocny w cofaniu obrażeń).

Czy parametr podstawowy jest ignorowany podczas korzystania z tablicy dla src?

+0

To naprawdę dziwne, czy możesz wypróbować './../ application-base-transpiled'? '{Base: './'}' powie gulpowi, aby zachować całą względną ścieżkę. –

+0

@Tom - na szczęście nie miało to żadnego efektu - byłoby naprawdę dziwne, gdyby tak się stało. –

Odpowiedz

5

w łyku strumieni ścieżka docelowy w pliku następujące Pseudo-równania:

gulp.dest + (gulp.src nie prowadząc base) = ścieżka docelowego pliku

przykład:

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

Wynik:

'dist/' + ('src/js/foo.js' nie prowadząc 'src/') = 'dist/js/foo.js'

W twoim przypadku:

'../application-base-transpiled/' + ('../application-base/foo/bar.js' nie prowadząc './') = '../application-base-transpiled/../application-base/foo/bar.js'

Więc plików skończyć w oryginalnym katalogu.

Musisz podać {base: '../application-base/'} do gulp.src(), aby twój przykład zadziałał.


UWAGA

Trzeba jeszcze zawierać '../application-base/' na swojej drodze src. Celem base jest manipulowanie ścieżką dest, według mojego równania powyżej; ma ona wartość , a nie w celu zmniejszenia liczby naciśnięć klawiszy wpisywanych w gulp.src. Więc wynik końcowy powinien być coś takiego

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()); 

Jeśli nie zdać base option do gulp.src() domyślnie jest ustawiony:

Domyślnie: wszystko przed rozpoczęciem glob (patrz glob2base)

Co oznacza, że ​​wszystko do pierwszego ** lub * we wzorze, który przechodzisz na gulp.src(), jest używane jako opcja base. Ponieważ Twój wzór to ../application-base/**/**.js, twoja opcja base automatycznie staje się ../application-base/.

+0

Dzięki @Sven - czy 'base' jest ignorowane, gdy przekazujesz src tablicy lub coś takiego? To jest to, co widzę, na moją ostatnią aktualizację –

+0

Ah - nm - Myślę, że widzę –

+0

sprawdź edycję dodałem do twojej odpowiedzi. Czy możesz potwierdzić, że nie napisałem niczego niepoprawnego (po prostu edytuj, jeśli tak)? W przeciwnym razie po prostu przyjmuję tę odpowiedź. Dzięki ** za ** pomoc –