それはあまり良い考えではないと思います。各ターゲットは、おそらく独自のリポジトリであるべきだと思われます。それを無視しても、ターゲット フォルダーと非ターゲット フォルダーを区別するのが難しいなど、他の問題が発生します。たとえば、現在のパターンはnode_modules/
ディレクトリ内の CoffeeScript ファイルと一致する可能性があります。
また、ターゲットのフォルダー構造が異なる (つまり、同じレベルにない) ことも奇妙に感じcoffee/
ますjs/
。繰り返しますが、それらは異なるプロジェクトであり、独自のリポジトリを持つ必要があるようです。
そうは言っても、本当にそのようにしなければならない場合は、これを達成する方法がいくつかあります。
まず、それを行う「通常の」方法は、複数のターゲットを手動で指定することです。Gruntfile.coffee
ここでは次の構文を使用します。
coffee:
target1:
expand: true
cwd: 'target1/coffee'
src: '**/*.coffee'
dest: 'target1/js'
ext: '.js'
targetX:
expand: true
cwd: 'targetX/some-folder/coffee'
src: '**/*.coffee'
dest: 'targetX/some-folder/js'
ext: '.js'
ただし、動的ターゲットが必要であり、不要なフォルダーをブラックリストに登録することを気にしない場合は、おそらく次のようなことを試してください。
coffee: do ->
targets = {}
for target in grunt.file.expand '**/coffee', '!node_modules/**'
targets[target.split('/', 1)[0]] =
expand: true
cwd: target
src: '**/*.coffee'
dest: target + '/../js'
ext: '.js'
targets
これは基本的に前のスニペットと同じですが、いくつかの不確実性が追加されます。targets/
フォルダーにすべてのターゲットを含め、targets/**/coffee
パターンとして 使用することで、おそらくブラックリストを取り除くことができます。
または、次を使用できますgrunt.file.expandMapping
。
coffee:
compile:
files: grunt.file.expandMapping ['**/coffee/**/*.coffee', '!node_modules/**'], '',
expand: true
ext: '.js'
rename: (base, src) ->
src.replace '/coffee/', '/js/'
シンプルな (そして醜い) ように見えるかもしれませんが、これは最も遅いオプションであり、最も間違っているように感じます。
そこで。それは可能ですが、おそらくあなたが本当に望んでいるものではありません。