JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 16391
  • Score
    100M100P100Q146941F
  • License MIT

Minify HTML in tagged template strings using html-minifier

Package Exports

  • babel-plugin-template-html-minifier

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (babel-plugin-template-html-minifier) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

babel-plugin-template-html-minifier

Travis CI Greenkeeper badge NPM Version NPM Downloads MIT

Minify HTML in tagged template strings using html-minifier.

Install

npm install --save-dev babel-plugin-template-html-minifier

Usage

In .babelrc:

{
  "plugins": [
    ["template-html-minifier", {
      "modules": {
        "lit-html": ["html"],
        "lit-element": [
          "html",
          {"name": "css", "encapsulation": "style"}
        ],
        "choo/html": [null],
        "hyperhtml": [{"name": "bind", "type": "factory"}],
        "hyperhtml-element": [{"name": null, "member": "html"}]
      },
      "htmlMinifier": {
        "collapseWhitespace": true
      }
    }]
  ]
}

Options

htmlMinifier

The value of this property is passed unmodified to html-minifier. See the html-minifier docs.

Note collapseBooleanAttributes should not be used when working with lit-html or other templating systems which give special meaning to non-static boolean attributes. Enabling collapseBooleanAttributes will cause this plugin to throw an exception:

html`<input readonly="${readonly}">`;

This exception is for two reasons. First because it means the chosen options have caused html-minifier to change the meaning of the HTML template. Second because it deletes the point where ${readonly} goes into the final output.

modules

A list of module names or import paths where tags are imported from. The values in the arrays refers to the export names, not the import names. null refers to the default export.

import choo from 'choo/html';
import * as lit from 'lit-html';
import {html as litHtml, css} from 'lit-element';
import HyperHTMLElement from 'hyperhtml-element';
import html from 'some-module';
import {bind} from 'hyperhtml';

choo`
  <div class="hello">
    Hello World
  </div>
`;

lit.html`
  <div class="hello">
    Hello World
  </div>
`;

litHtml`
  <div class="hello">
    Hello World
  </div>
`;

css`
  .sel {
    background: red;
  }
`;

class MyHyperHTMLElement extends HyperHTMLElement {
  created() {
    this.render();
  }

  render() {
    this.html`
      <div>
        Hello World
      </div>
    `;
  }
}

bind(document.body)`
  <div>
    Hello World
  </div>
`;

html`
  This
  is
  not
  processed
`;

Using the .babelrc shown in usage produces the following output:

import choo from 'choo/html';
import * as lit from 'lit-html';
import {html as litHtml, css} from 'lit-element';
import HyperHTMLElement from 'hyperhtml-element';
import html from 'some-module';
import {bind} from 'hyperhtml';

choo`<div class="hello"> Hello World </div>`;

lit.html`<div class="hello"> Hello World </div>`;

litHtml`<div class="hello"> Hello World </div>`;

css`.sel{background:red}`;

class MyHyperHTMLElement extends HyperHTMLElement {
  created() {
    this.render();
  }

  render() {
    this.html`<div> Hello World </div>`;
  }
}

bind(document.body)`<div> Hello World </div>`;

html`
  This
  is
  not
  processed
`;
  • choo is processed because of "choo/html": [null] specifies that the default export should be processed.
  • lit.html is processed because "lit-html": ["html"].
  • litHtml is processed because "lit-element": ["html"].
  • css is processed because "lit-element": [{"name": "css", "encapsulation": "style"}]. The encapsulation argument ensures that html-minifier understands that the template contains CSS, without it the template would be processed as HTML.
  • this.html in MyHyperHTMLElement is processed because "hyperhtml-element": [{"name": null, "member": "html"}] specifies that the html member of classes which extend the default export should be processed.
  • bind is processed because of "hyperhtml": [{"name": "bind", "type": "factory"}], the type factory specifies the bind returns a function which processes the tagged templates.
  • html is not processed because it was exported from an unlisted module.

All matching is done based on the exported name, not the local/imported name.

Running tests

Tests are provided by xo and ava.

npm install
npm test

Attribution

This module was originally created by goto-bus-stop.