【问题标题】:Configure Grunt File Name Matching for Files with Multiple Dots为具有多个点的文件配置 Grunt 文件名匹配
【发布时间】:2013-05-22 16:47:14
【问题描述】:

我刚开始使用 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 文件映射?

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

【问题讨论】:

    标签: gruntjs


    【解决方案1】:

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

    例如

    files: [{
      expand: true,
      src: ['*.js','!*min.js'],
      dest: 'js',
      cwd: 'js',
      ext: '.min.js',
      extDot: 'last'
    }]
    

    【讨论】:

    • 这完全有效,extDot 是在 Grunt 0.4.3 版本中添加的。请注意:不幸的是,您可能有一个名为 filename.min.eco.js 的文件(一个预编译为 JST 然后缩小的 Eco 模板),在这种情况下,扩展名既不在第一个点之后,也不在最后一个点之后(但从技术上讲,它仍然是 js )。另一个例子是underscore.string.min.js.gz。这是值得商榷的,最好有适合每个人需求的选项来实现他们想要的。
    • 解决他们可以更改 extDot 以指定第 n 个点的问题 - 但我猜这个用例太小了,以至于在过去的五年中不需要。
    【解决方案2】:

    查看Configuring Tasks 的“动态构建文件对象”部分。

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

    您遇到的问题是在 github 上以issue 的形式提出的,而咕噜声的人的回答是文件的“扩展名”应该是第一个“。”之后的所有内容。而不是最后一个。

    希望对你有所帮助!

    【讨论】:

    • 当然可以。看起来 Grunt 团队已经在这方面采取了坚定的立场。
    • 仅供参考,Configuring Tasks 文档现已移至 here
    【解决方案3】:

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

    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

    【讨论】:

    • 你可能需要也可能不需要在return dest之后添加+ '/' +
    • 这非常适用于 grunt-contrib-less,但我必须删除我拥有的 ext: 属性,而这个示例没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多