我正在使用grunt-contrib-htmlmin来缩小我在主干/下划线项目中的html,但是,当我在任何具有<%= myvar%>的下划线模板上运行grunt-contrib-htmlmin时,任务输出解析错误。有没有办法grunt-contrib-htmlmin可以忽略<%=和%>中的文字?
答案 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-htmlmin
和html-minifier
可以采用新选项。
正如@mckramer已经提到的,grunt-contrib-htmlmin
位于html-minifier
之上,因此您可以添加additional options:
customAttrAssign:<value>
允许支持自定义属性分配表达式的正则表达式数组
customAttrSurround:<value>
允许支持自定义属性环绕表达式的正则表达式数组
示例grunt配置(对于双括号{{ }}
):
var hbAttrWrapOpen = /\{\{(#|\^)[^}]+\}\}/;
var hbAttrWrapClose = /\{\{\/[^}]+\}\}/;
var hbAttrWrapPair = [hbAttrWrapOpen, hbAttrWrapClose];
htmlmin: {
blabla: {
options: {
...
customAttrSurround: [hbAttrWrapPair]
},
files: [
...
]
}
}
,这是唯一的限制
...
请注意,这些表达式用于解析个体 属性+值对,因此单个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];