23

我刚开始使用 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"
    ]

我认为,问题在于 usingext使所有三个 .coffee 文件的目标成为目标文件layout.js,这不是本意。

有没有一种很好的方法来为具有多个点的文件名配置 grunt 文件映射?

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

4

3 回答 3

31

请注意,还有另一个选项“extDot”可用于指定 ext 应在哪个点之后应用(第一个或最后一个):

例如

files: [{
  expand: true,
  src: ['*.js','!*min.js'],
  dest: 'js',
  cwd: 'js',
  ext: '.min.js',
  extDot: 'last'
}]
于 2014-07-11T16:56:03.610 回答
12

查看配置任务的“动态构建文件对象”部分。

ext您可以指定rename哪个函数可以让您为文件名创建自己的映射,而不是指定 。

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

希望对你有帮助!

于 2013-05-22T17:14:51.460 回答
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

于 2013-09-25T08:31:07.617 回答