如何使用grunt-contrib-htmlmin删除一些特定于敲门的评论?

Sal*_*ali 3 html minify knockout.js gruntjs grunt-contrib-htmlmin

我正在尝试使用grunt-contrib-html来缩小我的html.唯一的问题是我使用无容器控制流语法的敲除,这只是html注释,但它们对于淘汰非常重要:

<ul>
    <li>This item always appears</li>
    <!-- ko if: someExpressionGoesHere -->
        <li>I want to make this item present/absent dynamically</li>
    <!-- /ko -->
</ul>

<!-- ko foreach: myItems -->
    <li>Item <span data-bind="text: $data"></span></li>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)

所以当我使用minifier时有以下选项:

options: {
   removeComments: true,
   collapseWhitespace: true
}
Run Code Online (Sandbox Code Playgroud)

缩小后应用程序不起作用(不出意外,它会删除<!-- ko comments).删除removeComments解决了问题,但我的HTML有很多评论,只有少数是特定的淘汰赛.此外,所有淘汰赛评论都很容易识别:它们<!-- ko在开始和<!-- /ko -->结束时都有.

寻找潜在的HTML minifier选项 - 没有什么比"处理正确的淘汰评论"更像.

那么有没有办法解决我的问题:缩小html删除评论,但留下淘汰赛的具体评论?

kan*_*gax 8

所以...现在通过ignoreCustomComments选项实现.

这是我们测试套件的片段:

var input = '<!-- ko if: someExpressionGoesHere --><li>test</li><!-- /ko -->';

equal(minify(input, {
  removeComments: true,
  // ignore knockout comments
  ignoreCustomComments: [
    /^\s+ko/,
    /\/ko\s+$/
  ]
}), input);
Run Code Online (Sandbox Code Playgroud)