2014-03-07 31 views
52

試圖創造一個吞掉的任務,將管一堆不同文件夾中的文件通過LESS,然後將它們輸出到一個文件夾在原有基礎上資源。考慮這個文件夾結構:Gulp.js - 在gulp.dest使用路徑從gulp.src()()

Project 
+-- /Module_A 
| +- /less 
| | +- a.less 
| +- a.css 
| 
+-- /Module_B 
    +- /less 
    | +- b.less 
    +- b.css 

這裏是我的gulpfile:

var gulp = require('gulp'); 
var gutil = require('gulp-util'); 
var less = require('gulp-less'); 

gulp.task('compileLess', function() { 
    gulp.src('./*/less/*.less') 
    .pipe(less()) 
    .pipe(gulp.dest(???)); 
}); 

gulp.task('default', ['compileLess']); 

我知道gulp.dest()期望的路徑中通過,但在我的例子基於源路徑將是不同的文件。那麼如何從源代碼獲取路徑,修改它,然後將它傳遞給gulp.dest()?

或者我要對這個錯誤的方式?

+1

鑑於你例如輸入,又該輸出是什麼? Gulp使用相對文件路徑(基於第一個glob模式)來確定輸出目錄。 – OverZealous

+0

如果輸入的是'項目/ Module_A /更少/ a.less',我所要的輸出是'項目/ Module_A/a.css'。我能夠完成使用gulp重命名插件。 – Adam

回答

28

你應該看看gulp-rename

差不多:

gulp.src('./*/less/*.less') 
    .pipe(less()) 
    .pipe(rename(function(path){ 
    // Do something/modify the path here   
    })) 
    .pipe(gulp.dest('./finalRootDestination')) 

你離開gulp.dest你的最終輸出目錄指向,但在飛,不管以何種邏輯的單個文件路徑修改你想要在回調中進行gulp-rename。

+0

謝謝,這工作完美。 – Adam

+0

你能否進一步解釋你是如何獲得這個的?我使用的是重命名插件,但無法弄清楚如何獲得:「IMG/jQuery的prettyPhoto /圖像/ prettyPhoto/image.jpg的」輸出在「IMG/prettyPhoto/image.jpg的」。我如何刪除這兩個無用的文件夾?感謝 – pwnjack

+0

@pwnjack:你看我聯繫'一飲而盡,rename'的文檔? –

81

src設置base選項,它會保持你少文件的原始路徑。

gulp.task('compileLess', function() { 
    gulp.src('./*/less/*.less', {base: './'}) 
    .pipe(less()) 
    .pipe(gulp.dest('./dist')); 
}); 

./dist目的地可以是任何東西。無論你想要放置文件結構。

其他信息在這裏: https://github.com/wearefractal/glob-stream#options

+2

是的!這就是我一直在尋找的! – Funkodebat

+2

完美!這應該是被接受的答案。 – zumek

+0

關鍵字'base'給了我錯誤的想法。這是我正在尋找的解決方案。 – Simon