我刚刚开始使用grunt,并且喜欢它。 我一直遇到一个似乎很常见的问题。 这里是。我有文件命名,以便点后的单词类似于类。例如:
layout.coffee
layout.blog.coffee
layout.site.coffee
我的grunt任务被配置为观看这些文件并将它们翻译成这样的js:
coffee:
dev:
files: [
expand: true
cwd: "<%= yeoman.app %>"
src: ["**/*.coffee"]
dest: "<%= yeoman.dev %>"
ext: ".js"
]
我认为问题在于,使用ext
会使所有三个.coffee文件的目标成为目标文件layout.js
,这不是意图。
是否有一种很好的方法可以为具有多个点的文件名配置grunt文件映射?
现在我必须更改我的命名约定以使用-
而不是.
,这是一个拖累:(
答案 0 :(得分:29)
请注意,还有另一个选项“extDot”可用于指定ext应该应用于哪个点(第一个或最后一个):
E.g。
files: [{
expand: true,
src: ['*.js','!*min.js'],
dest: 'js',
cwd: 'js',
ext: '.min.js',
extDot: 'last'
}]
答案 1 :(得分:11)
查看Configuring Tasks的“动态构建文件对象”部分。
您可以指定ext
而不是指定rename
,这是一个允许您为文件名创建自己的映射的函数。
你遇到的问题在github上被提升为issue,而咕噜咕噜的回答是文件的“扩展名”应该是第一个“。”之后的所有内容。而不是最后一个。
希望能帮到你!
答案 2 :(得分:11)
这就是我在项目中使用的解决方法:
uglify : {
build : {
src : ['**/*.js', '!*.min.js'],
cwd : 'js/',
dest : 'js/',
expand : true,
rename : function (dest, src) {
var folder = src.substring(0, src.lastIndexOf('/'));
var filename = src.substring(src.lastIndexOf('/'), src.length);
filename = filename.substring(0, filename.lastIndexOf('.'));
return dest + folder + filename + '.min.js';
}
}
}
如果文件名类似于 jquery.2.0.3.js ,那么在缩小之后它将是 jquery.2.0.3.min.js 。