2013-06-09 20 views
17

私は、連結したいJavaScriptファイルを含むいくつかのサブフォルダを持つプロジェクトを持っています。それらを設定する正しい方法は何でしょうか?grunt.jsの宛先の動的マッピング

例えば、

ソース:/modules/$modulename/js/*.js(複数のファイル) DEST:

/modules/$modulename/js/compiled.jsそれでは、私がやりたいことはjs-をコンパイルすることですサブフォルダ($ modulename)の未知/未構成カウントのファイルをサブフォルダごとに1つのファイルにまとめます。

これは可能ですか? iが私のデフォルトの設定では、連結ジョブの前にpreparemodulejsを入れた後

grunt.registerTask('preparemodulejs', 'iterates over all module directories and compiles modules js files', function() { 

    // read all subdirectories from your modules folder 
    grunt.file.expand('./modules/*').forEach(function(dir){ 

     // get the current concat config 
     var concat = grunt.config.get('concat') || {}; 

     // set the config for this modulename-directory 
     concat[dir] = { 
      src: [dir + '/js/*.js', '!' + dir + '/js/compiled.js'], 
      dest: dir + '/js/compiled.js' 
     }; 

     // save the new concat config 
     grunt.config.set('concat', concat); 

    }); 

}); 


次の関数は(hereandnow78の指示の後に構築された)仕事をしていません。

答えて

32

おそらく、自分のサブフォルダを反復処理し、concat構成に動的に追加する独自のタスクをコーディングする必要があります。これで

grunt.registerTask("your-task-name", "your description", function() { 

    // read all subdirectories from your modules folder 
    grunt.file.expand("./modules/*").forEach(function (dir) { 

    // get the current concat config 
    var concat = grunt.config.get('concat') || {}; 

    // set the config for this modulename-directory 
    concat[dir] = { 
    src: ['/modules/' + dir + '/js/*.js', '!/modules/' + dir + '/js/compiled.js'], 
    dest: '/modules/' + dir + '/js/compiled.js' 
    }; 

    // save the new concat configuration 
    grunt.config.set('concat', concat); 
    }); 
    // when finished run the concatinations 
    grunt.task.run('concat'); 
}); 

実行:

$ grunt your-task-name 

このコードはテストされていないが、私はそれがあなたの仕事をするべきだと思います。

ヒント:このコードを外部ファイルに入れ、gruntfileを小さくしたい場合はgruntfileにインクルードすることができます。作業ディレクトリ内のファイルにこれを置く:

module.exports = function(grunt) { 
    grunt.registerTask("your-task-name", "your description", function() { 
    ... 
    }); 
}; 

とあなたのgruntfileにで読み込む:

grunt.loadTasks("./tasks"); 
+0

hereannow78このアプローチ@は素晴らしいですが、私は完全に私は、ファイル構造に読み取ることができることを忘れてしまいました。どの機能が機能するのかという質問にアップデートを入れます。 – Patrick

+0

+1 'tasks'ディレクトリを提案します。あまりにも多くの肥大化Gruntfilesがあります。 – ZenMaster

+0

これはかなり古く、親ディレクトリからフォルダを除外する方法はありますか? – pcnate

関連する問題