2016-10-08 4 views
1

フォルダ構造に)(CONCATでフォルダ構造を維持します。 coffee/には任意の数のサブフォルダがあります。私は現在、この一気タスク持っは一気

www 
| 
+-modules.js 
| 
+-testDir 
| | 
| +-modules.js 
| 
+-anotherDir 
| | 
| +-modules.js 
| 
+- etc... 

:各フォルダからのすべての.coffeeファイルはmodules.jsファイルにconcatenedしなければならないファイルが正しいサブフォルダに配置されているconcat()なし

gulp.task('coffee', function() { 
    gulp.src('./coffee/**/*.coffee', {base: './coffee/'}) 
     .pipe(coffee({bare: true}).on('error', gutil.log)) 
     .pipe(uglify()) 
     // .pipe(concat('modules.js')) 
     .pipe(gulp.dest('./www')) 
}); 

を(彼らは」 concatenedされていない)。私はこれを正しく実現するにはどうすればよい

www 
| 
+-modules.js 

concat()ですべてのファイルが単一のファイルにmodules.js concatenedていますか?ここで

+0

不明。あなたは良い例を挙げる必要があります。あなたはすべてのディレクトリのすべてのファイルを別々の 'modules.js'ファイルに連結しますか?あるいは、2つの 'modules.js'ファイル(1つはテスト用、もう1つは残りのファイル)を必要としますか? –

+0

'coffeeフォルダにある場合は、別々のmodules.jsファイルに連結するすべてのディレクトリのすべてのファイル'多くのディレクトリtest1 test2 ... wwwのtest100は、各フォルダ内のmodules.jsと同じフォルダ構造でなければなりません。 – user199588

+0

質問の例を編集して、あなたが何を望んでいるかを説明する必要があります(たとえば、複数のサブディレクトリレベルについてはどうでしょうか?)。このプロジェクトの –

答えて

2

gulp-flatmapを使用してソリューションです:

var flatmap = require('gulp-flatmap'); 

gulp.task('coffee', function() { 
    return gulp.src('./coffee/{*,}/', {base:'./coffee'}) 
    .pipe(flatmap(function(stream, dir) { 
     return gulp.src(dir.path + '/*.coffee') 
     .pipe(coffee({bare: true}).on('error', gutil.log)) 
     .pipe(uglify()) 
     .pipe(concat('modules.js')) 
     .pipe(gulp.dest('./www/' + path.relative(dir.base, dir.path))) 
    })) 
}); 

この最初のストリームにcoffee/ディレクトリおよびその直接のサブディレクトリのすべてを置きます。それらのディレクトリのそれぞれは、それぞれのディレクトリ内のすべての.coffeeファイルを連結する新しいストリームにマップされます。最後に、modules.jsファイルのそれぞれの適切な宛先フォルダは、path.relative()を使用して決定されます。

+0

ありがとう、ありがとう。私はフラットマップについて知りませんでした。 – user199588