2016-09-10 10 views
1

ネストされたディレクトリ構造内のいくつかのjsファイルを別の場所にある1つのファイルに連結しようとしています。それらは特定の順序で連結されなければならず、gulpのglob検索がネストされたファイルを取得するデフォルトの順序を変更する方法を見つけることができません。私は無用にさまざまなグロブパターンを試してみました。カスタム反復順序付きGulp連結

次のように私のディレクトリ構造は次のとおりです。

components 

- componentA 
    - controllers 
    - controllerA1.js 
    - controllerA2.js 
    - services 
    - serviceA1.js 
    - configA.js 
    - moduleA.js 

    - componentB 
    - controllers 
    - controllerB1.js 
    - controllerB2.js 
    - services 
    - serviceB1.js 
    - configB.js 
    - moduleB.js 

私はファイルは次の順序で単一のファイルに連結する:

configA.js 
moduleA.js 
controllerA1.js 
controllerA2.js 
serviceA1.js 

configB.js 
moduleB.js 
controllerB1.js 
controllerB2.js 
serviceB.js 

だからゴクゴクを反復ダウン各構成要素と繰り返し処理にそれが次のコンポーネントに移動して同じことをする前に行くことができます。

代わりに、それは次の順序で連結します、それはトップレベルのディレクトリに入っつまり

configA.js 
moduleA.js 
configB.js 
moduleB.js 
controllerA1.js 
controllerA2.js 
serviceA1.js 
controllerB1.js 
controllerB2.js 
serviceB1.js 

そのディレクトリ内のトップレベルの各ファイルを反復処理し、次のトップレベルのディレクトリにジャンプ最初のトップレベルディレクトリに戻って次のレベルダウンなどを繰り返す前に同じことをします。

私は、それぞれ問題があるいくつかの異なる方法を試しました。

は、私は次のように繰り返し順序をカスタマイズするには一気再帰フォルダのプラグインを使用して試してみました:

gulp.task('generateTree', recursivefolder({ 
     base: './components', 
     exclude: [ // exclude the debug modules from thus build 
      //'debug-modules' 
     ] 
    }, function(folderFound){ 
    //This will loop over all folders inside pathToFolder main and recursively on the children folders, secondary 
    //With folderFound.name gets the folderName 
    //With folderFound.path gets all folder path found 
    //With folderFound.pathTarget gets the relative path beginning from options.pathFolder 
    return gulp.src(folderFound.path + "/**/*.js") 
      .pipe($.concat("app.js")) 
      .pipe(gulp.dest('./build/assets/js/')); 
})); 

この繰り返し処理を私が欲しいために、私はそれが一人として最初にトップレベルのディレクトリを書いていると信じて第2のストリームが第1のストリームを上書きするように第2のストリームを別のストリームとして書き込む。だから私は、次のファイルのみが連結された状態で残されています:

configB.js 
moduleB.js 
controllerB1.js 
controllerB2.js 
serviceB.js 

だから私はまた、再帰的にファイルに書き込む前に、同じストリームに追加するアドオンストリームプラグインを使用してみました。私は細部を誰にも譲らないだろうが、基本的にはこれを希望どおりに働かせることはできない。誰も投稿/チュートリアル/プラグインをお勧めできますか?ありがとう。

答えて

2

gulp.src()は、渡されたグロブの順序を尊重し、同じ順序でファイルを発行します。それはあなたが明示的にgulp.src()に各コンポーネントのグロブを渡した場合、それは最初のように、その後第二の成分のために、最初のコンポーネントのファイルを放出します意味:

gulp.task('default', function() { 
    return gulp.src([ 
     'components/componentA/**/*.js', 
     'components/componentB/**/*.js' 
    ]) 
    .pipe($.concat('app.js')) 
    .pipe(gulp.dest('./build/assets/js/')); 
}); 

もちろん、あなたがその配列を維持する必要はありません手動であなたがしたいことは、プロジェクトで利用可能なコンポーネントに基づいて配列を生成することです。 globモジュールを使用することができます。

var glob = require('glob'); 

gulp.task('default', function() { 
    return gulp.src(glob.sync('components/*').map(c => c + '/**/*.js')) 
    .pipe($.concat('app.js')) 
    .pipe(gulp.dest('./build/assets/js/')); 
}); 
+0

これはありがとうございました! – jonnjo2005

関連する問題