Gruntjs 为具有多个点的文件配置Grunt文件名匹配

Gruntjs 为具有多个点的文件配置Grunt文件名匹配,gruntjs,Gruntjs,我刚开始使用grunt,我很喜欢它。 我一直遇到一个似乎很常见的问题。 给你。我将文件命名为点后的单词类似于类。例如: layout.coffee layout.blog.coffee layout.site.coffee 我的grunt任务配置为监视这些文件并将其转换为js,如下所示: coffee: dev: files: [ expand: true cwd: "<%= yeoman.app %>" src: ["**/*.co

我刚开始使用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"
    ]
咖啡:
开发人员:
档案:[
扩展:正确
cwd:“
src:[“***咖啡”]
目的地:“
分机:“.js”
]
我认为问题在于,使用
ext
会使所有三个.coffee文件的目标文件都成为目标文件
layout.js
,而这并不是目的所在

有没有一种很好的方法可以为带有多个点的文件名配置grunt文件映射

现在,我必须更改我的命名约定,使用
-
而不是
,这是一个拖拽:(

请查看的“动态构建文件对象”部分

您可以指定
rename
,而不是指定
ext
,这是一个允许您为文件名创建自己映射的函数

您遇到的问题是在github上遇到的,grunt的人回答说,文件的“扩展名”应该是第一个“.”之后的所有内容,而不是最后一个


希望这对您有所帮助!

这就是我在项目中使用的解决方法:

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,请注意,您可以使用另一个选项“extDot”来指定ext应在哪个点之后应用(第一个或最后一个):

例如


当然可以。看起来Grunt团队已经在这个问题上采取了坚定的立场。仅供参考,配置任务文档现在已经移动。您可能需要或不需要在
return dest
之后添加
+'/'+
,这对Grunt contrib不太理想,但我必须删除我拥有的ext:属性,而这个示例没有。这就是性能非常有效,
extDot
是在Grunt版本0.4.3中添加的。请注意:不幸的是,您可能有一个名为
filename.min.eco.js
(一个eco模板预编译为JST,然后缩小)的文件,在这种情况下,扩展既不在第一个点之后,也不在最后一个点之后(但从技术上讲,它仍然是
js
)。另一个例子是
下划线.string.min.js.gz
。这是有争议的,最好有适合每个人需要的选项来实现他们想要的。为了解决这个问题,他们可以更改extDot来指定第n个点-但我猜这个用例太小了,以至于在过渡的五年内不需要。
files: [{
  expand: true,
  src: ['*.js','!*min.js'],
  dest: 'js',
  cwd: 'js',
  ext: '.min.js',
  extDot: 'last'
}]