2016-04-14 87 views
7

我一飲而盡代碼看起來像這樣,在部分gulp.dest不創建目標文件夾

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

如果我改變

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

.pipe(gulp.dest(''))

則創建傳輸文件,並覆蓋原件。問題是,

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

不保存文件,使用相同的原始路徑,下application-base-transpiled

正如你所看到的,我使用的是基礎,這好像不工作。

我錯過了什麼?

編輯

我看着更加緊密,而且似乎甚至

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

咕嘟咕嘟是transpiled文件仍放置到原來的地方,覆蓋原來的。關於我所傳遞的那個Gulp不喜歡的東西,並且正在默默無視。

EDIT 2

看來去除base選項來解決這個問題,違背了意見,我在其他地方見過。 gulp.dest的文檔沒有真正討論這一點。

任何人都可以提供一些見解?

編輯3

每斯文的答案,我想這

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

但似乎基本被忽略,從我自己的當前目錄中的文件被抓住,並在地方transpiled (我想要的最後一件事 - 幸運的是GIT有助於消除傷害)。

使用src的數組時忽略基本參數嗎?

+0

這真的很奇怪,你可以試試'./../ application-base-transpiled'嗎? '{base:'./'}'會告訴大家保存整個相對路徑。 –

+0

@湯姆 - 幸運的是沒有任何影響 - 如果真的發生了,那真的會非常怪異。 –

回答

5

在大口流的文件的目標路徑遵循該僞方程:

gulp.dest +(gulp.src無前導base)=文件的DEST路徑

實施例:

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

結果:

'dist/' +('src/js/foo.js'沒有前導'src/')= 'dist/js/foo.js'

你的情況:

'../application-base-transpiled/' +('../application-base/foo/bar.js'沒有前導'./')= '../application-base-transpiled/../application-base/foo/bar.js'

所以你的文件最終在原來的目錄。

你必須通過{base: '../application-base/'}gulp.src()才能使你的例子工作。


注意

你仍然需要包括'../application-base/'src路徑。 base的目的是按照上面的方程來操縱dest路徑;它的確如此,而不是用於減少您在gulp.src中輸入的按鍵次數。所以,最終的結果應該是這樣的

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

如果沒有傳遞到base option一個gulp.src()默認設置:

默認:一個水珠開始前的一切(見glob2base

這是什麼意思是說,一切都達到第一個***在您傳遞給gulp.src()的模式中用作base選項。由於您的模式爲../application-base/**/**.js,您的base選項將自動變爲../application-base/

+0

Thanks @Sven - 當你傳遞一個數組或其他東西時忽略'base'?這就是我看到的,根據我最近的更新 –

+0

啊 - nm - 我想我看到 –

+0

檢查我添加到您的答案的編輯。你能否確認我沒有寫錯任何東西(只要編輯出來,如果是的話)?否則,我會接受這個答案。謝謝你的幫助 –

相關問題