- From: Renoir Boulanger <notifications@github.com>
- Date: Sun, 23 Apr 2023 18:22:11 -0700
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/782/1519243229@github.com>
Here's one experiment I made on the idea. --- I did implement a minimal version of lazy loading as an ESM module loaded over http. There's probably other ways to do. This works well when I build pages and want to load only things I use in the view. One `esm-module` file per component/feature. In my usage, I serve over those from my own domain name, that’s proxyied by something like Fastly/CloudFlare, I serve proper `content-type` (and `Access-Control-Allow-Origin`) when calls are coming from known origins I control. ## Definition ```js /** * File: https://renoirb.com/esm-modules/value-boolean-element.mjs */ export class ValueBooleanElement extends HTMLElement { /* ... */ } /** * EXAMPLE LazyLoader */ export const registerCustomElement = ( { customElements }, localName = 'value-boolean', ) => { let pickedName = localName.toLowerCase() if (/^[a-z]([\w\d-])+$/.test(pickedName) === false) { const message = `Invalid element name "${pickedName}", it must only contain letters and dash.` console.warn(message) pickedName = 'value-boolean' } if (!customElements.get(pickedName)) { customElements.define(pickedName, ValueBooleanElement) } else { console.log( `ERR\t customElements.define <${pickedName} />, already defined.`, ) } } /** * URL Query param to tell via URL which name to use to register to the realm * it's getting loaded into. * * ?registerElement=my-foo */ const registerElement = new URL(import.meta.url).searchParams.get( 'registerElement', ) if (registerElement) { try { window && registerCustomElement(window, registerElement) } catch (e) { console.log(`ERR\t No access to global window: ${e}`) } } ``` ## Usage ```html <html> <body> <my-value-boolean></my-value-boolean> <!-- Eventually, somehow --> <script type="module"> import from 'https://renoirb.com/esm-modules/value-boolean-element.mjs?registerElement=my-value-boolean' </script> </body> </html> ``` -- Reply to this email directly or view it on GitHub: https://github.com/WICG/webcomponents/issues/782#issuecomment-1519243229 You are receiving this because you are subscribed to this thread. Message ID: <WICG/webcomponents/issues/782/1519243229@github.com>
Received on Monday, 24 April 2023 01:22:17 UTC