grunt contrib htmlmin如何忽略模板标记

grunt-contrib-htmlmin how to ignore template tags

本文关键字:何忽略 contrib htmlmin grunt      更新时间:2023-09-26

当我在任何具有<%=myvar%>,则任务输出一个解析错误。有没有一种方法可以忽略<%=内的文本和%>?

由于发布了此问题,html-minifier(由grunt-contrib-htmlmin使用)中引入了一个新功能,以忽略导致问题的插值标记

例如,以下html部分:

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

现在将缩小为:

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

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

你可以使用网站上的演示来测试它。如果有效,您可以更新项目以使用新版本。

此问题是旧问题,但grunt-contrib-htmlminhtml-minifier可以采用新选项。

正如@mckramar已经提到的,grunt-contrib-htmlmin位于html-minifier之上,因此您可以添加其他选项:

customAttrAssign:<value>

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

customAttrSurround:<value>

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

解决方案

咕哝配置示例(用于双支架{{ }}):

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}} />

就是这样,只要你关注你的标记,它就会毫无问题地工作。

相同的解决方法,除了使用针对Jekyll标签的regexp:

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