kangax / html-minifier

Javascript-based HTML compressor/minifier (with Node.js support)
http://kangax.github.io/html-minifier/
MIT License
4.94k stars 571 forks source link

includeAutoGeneratedTags not working properly #1045

Open AndriyGo opened 5 years ago

AndriyGo commented 5 years ago

Here is a test case:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div>
      <header> 
      </header>

When I minify it with includeAutoGeneratedTags set to false, I get the following output <!doctype html><div><header></header></div>. As you can see, a closing </div> is added. It is a huge problem when minifying template files.

In case it is relevant, here are all the options which I have (although I did try to change them and they did not influence current behaviour with div):

{
  "caseSensitive": false,
  "collapseBooleanAttributes": true,
  "collapseInlineTagWhitespace": true,
  "collapseWhitespace": true,
  "conservativeCollapse": false,
  "decodeEntities": true,
  "html5": true,
  "includeAutoGeneratedTags": false,
  "keepClosingSlash": false,
  "maxLineLength": 0,
  "minifyCSS": true,
  "minifyJS": true,
  "preserveLineBreaks": false,
  "preventAttributesEscaping": false,
  "processConditionalComments": true,
  "processScripts": [
    "text/html",
"application/ld+json"
  ],
  "removeAttributeQuotes": false,
  "removeComments": true,
  "removeEmptyAttributes": true,
  "removeEmptyElements": false,
  "removeOptionalTags": true,
  "removeRedundantAttributes": true,
  "removeScriptTypeAttributes": true,
  "removeStyleLinkTypeAttributes": true,
  "removeTagWhitespace": false,
  "sortAttributes": true,
  "sortClassName": true,
  "trimCustomFragments": true,
  "useShortDoctype": true
}

I thought that #540 was supposed to add an option to remove such behavior. Is there any other way yo turn off such additions of closing tags?

onebelarusianguy commented 4 years ago

+1

DanielRuf commented 4 years ago

@onebelarusianguy you might want to try the latest version.

I can not reproduce it in my fork and also not in the original project:

grafik

grafik

onebelarusianguy commented 4 years ago

@DanielRuf correct, but if you'd use closed tags </div></body></html> in template file like footer.php, minifier just skip them which lead to invalid markup. But I already solved this issue wrapping closed tags in <!-- htmlmin:ignore --> construction.

DanielRuf commented 4 years ago

In my opinion the htmlmin:ignore comment to ignore such markup is the correct approach for this case.

There were similar issues about this and that is a valid solution.