配置多点文件的Grunt文件名匹配

Sim*_*lGy 23 gruntjs

我刚开始使用咕噜,并喜欢它.我一直遇到一个似乎很常见的问题.这里是.我有文件命名,以便点后的单词类似于类.例如:

layout.coffee
layout.blog.coffee
layout.site.coffee
Run Code Online (Sandbox Code Playgroud)

我的grunt任务配置为观察这些文件并将它们转换为js,如下所示:

coffee:
  dev:
    files: [
      expand: true
      cwd: "<%= yeoman.app %>"
      src: ["**/*.coffee"]
      dest: "<%= yeoman.dev %>"
      ext: ".js"
    ]
Run Code Online (Sandbox Code Playgroud)

我认为,问题在于使用ext将所有三个.coffee文件的目标作为目标文件layout.js,这不是意图.

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

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

Vin*_*niH 31

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

例如

files: [{
  expand: true,
  src: ['*.js','!*min.js'],
  dest: 'js',
  cwd: 'js',
  ext: '.min.js',
  extDot: 'last'
}]
Run Code Online (Sandbox Code Playgroud)

  • 这完全有效,在Grunt版本0.4.3中添加了`extDot`.请注意:遗憾的是,你可能有一个名为`filename.min.eco.js`的文件(一个预编译到JST然后缩小的Eco模板),在这种情况下,扩展既不是在第一个点之后,也不是在最后一个点之后(但仍然是从技术上讲,它是`js`).另一个例子是`underscore.string.min.js.gz`.这是有争议的,有选择适合每个人的需求来实现他们想要的东西. (3认同)

go-*_*leg 12

请查看配置任务的 "动态构建文件对象"部分.

除了指定的ext,你可以指定rename它是可以让你创建自己的映射文件名的功能.

您遇到的问题是github上的一个问题,而咕噜咕噜的回答是文件的"扩展名"应该是第一个"."之后的所有内容.而不是最后一个.

希望对你有所帮助!

  • 当然可以.看起来Grunt团队已经在这个问题上采取了坚定的立场. (3认同)

sun*_*tro 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';
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当文件名就像jquery.2.0.3.js那么在缩小之后它将是jquery.2.0.3.min.js.