uce-loader

A minimalistic, framework agnostic, lazy Custom Elements loader

Usage no npm install needed!

<script type="module">
  import uceLoader from 'https://cdn.skypack.dev/uce-loader';
</script>

README

ยตce-loader

Social Media Photo by Guillaume Bolduc on Unsplash

A minimalistic, framework agnostic, lazy Custom Elements loader.

Example

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <script type="module">
  // <script src="//unpkg.com/uce-loader"> or ...
  import loader from '//unpkg.com/uce-loader?module';

  // will load every custom elements via the path
  loader({
    // by default it's document
    container: document.body,
    // invoked per each new custom-element name found
    on(newTag) {
      const js = document.createElement('script');
      js.src = `js/components/${newTag}.js`;
      document.head.appendChild(js);
    }
  });
  // js/components/compo-nent.js
  // js/components/what-ever.js
  // which will bring in also
  // js/components/whatever-else.js
  </script>
</head>
<body>
  <compo-nent></compo-nent>
  <hr>
  <what-ever></what-ever>
</body>
</html>

If loader({container: document, on(tagName){}}) API is too simplified, feel free to check lazytag out.

About ShadowDOM

If your components use attachShadow and internally use custom elements that should be lazy loaded, be sure the shadowRoot is observed.

const shadowRoot = this.attachShadow({mode: any});
loader({
    container: shadowRoot,
    on(newTag) {
      // ... load components
    }
  });

V2 vs V1

Current version of this module does not invoke the .on(...) method if the element is already registered as Custom Element.

In V1 any tag name would've passed through the loader instead.