我不认为这是一个很好的主意。听起来每个目标都应该是自己的存储库。即使我们忽略这一点,您也会遇到其他问题,例如难以区分目标文件夹和非目标文件夹。例如,您当前的模式可能会匹配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/'
虽然它可能看起来有点简单(而且丑陋),但它是最慢的选择并且感觉最错误。
所以在那里。这是可能的,但很可能不是你真正想要的。