ray*_*nco 0 javascript coffeescript gruntjs
这是关于使用Grunt.js进行动态文件映射的一般性问题,但出于示例目的,我将尝试在具有动态结构的项目中构建咖啡文件:
在这里,我可以拥有多个(动态)目标文件夹,其深度不同.查找咖啡文件仍然很容易,**/coffee/*.coffee
随时都可以匹配.
我想要实现的目标是使dest属性相对于匹配的咖啡文件:
**/coffee/*.coffee
../js/*.js
而不是使它相对于项目文件夹(Gruntfile).
coffee: {
compile: {
files: [
{
expand: true,
src: ['**/coffee/*.coffee'],
dest: '../js/', // This won't work ! But I wish it could :)
ext: '.js'
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
你会如何实现这一目标?
我认为这不是一个好主意.听起来每个目标应该是它自己的存储库.即使我们忽略了这一点,你也会遇到其他问题,例如难以分辨目标和非目标文件夹.例如,您当前的模式可能与目录中的CoffeeScript文件匹配node_modules/
.
我也觉得很奇怪,你的目标具有不同的文件夹结构(即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'
Run Code Online (Sandbox Code Playgroud)
但是,如果您确定需要拥有动态目标,并且不介意将不需要的文件夹列入黑名单,那么可以尝试以下方法:
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
Run Code Online (Sandbox Code Playgroud)
这基本上与前一个片段相同,但增加了一些不确定性.您可以通过让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/'
Run Code Online (Sandbox Code Playgroud)
虽然它可能看起来很简单(而且很丑陋),但它是最慢的选择并且感觉最错误.
所以那里.这是可能的,但很可能不是你真正想要的.
归档时间: |
|
查看次数: |
2203 次 |
最近记录: |