grunt-contrib-htmlmin如何忽略模板标签

时间:2013-11-19 19:57:24

标签: javascript underscore.js gruntjs

我正在使用grunt-contrib-htmlmin来缩小我在主干/下划线项目中的html,但是,当我在任何具有<%= myvar%>的下划线模板上运行grunt-contrib-htmlmin时,任务输出解析错误。有没有办法grunt-contrib-htmlmin可以忽略<%=和%>中的文字?

3 个答案:

答案 0 :(得分:3)

自您发布此问题以来,html-minifier grunt-contrib-htmlmin使用了ignore the interpolation tags导致此问题的demo on the website新功能。

例如,以下html partial:

<div>
    <span><%= variable %></span>
</div>

现在将缩小为:

<div><span><%= variable %></span></div>

在更改之前,它会导致错误。

您可以使用{{3}}对其进行测试。如果可行,您可以更新项目以使用新版本。

答案 1 :(得分:3)

此问题已过时,但grunt-contrib-htmlminhtml-minifier可以采用新选项。

正如@mckramer已经提到的,grunt-contrib-htmlmin位于html-minifier之上,因此您可以添加additional options

  

customAttrAssign:<value>

     

允许支持自定义属性分配表达式的正则表达式数组

     

customAttrSurround:<value>

     

允许支持自定义属性环绕表达式的正则表达式数组

解决方案

示例配置(对于双括号{{ }}):

var hbAttrWrapOpen = /\{\{(#|\^)[^}]+\}\}/;
var hbAttrWrapClose = /\{\{\/[^}]+\}\}/;
var hbAttrWrapPair = [hbAttrWrapOpen, hbAttrWrapClose];

htmlmin: {
  blabla: {
    options: {
      ...
      customAttrSurround: [hbAttrWrapPair]
    },
    files: [
      ...
    ]
  }
}

根据documentation

,这是唯一的限制
  

...

     

请注意,这些表达式用于解析个体   属性+值对,因此单个Handlebars表达式可能不会跨越   多个属性。例如,以下标记不会   确认:

<img src="logo.svg" {{#if logo_title}}alt="{{logo_title}}" title="{{logo_title}}"{{/if}} />
     

相反,每个属性必须单独包装:

<img src="logo.svg" {{#if logo_title}}alt="{{logo_title}}"{{/if}} {{#if logo_title}}title="{{logo_title}}"{{/if}} />

就是这样,只要你密切关注你的标记,它就能顺利运行。

答案 2 :(得分:2)

相同的解决方法,除了Jekyll标记的正则表达式:

var jekyllConditionalWrapOpen = /\{\% if[^}]+\%\}/;
var jekyllConditionalWrapClose = /\{\%[^}]+endif \%\}/;
var jekyllConditionalWrapPair = [jekyllConditionalWrapOpen, jekyllConditionalWrapClose];