Svelte: construye componentes en un módulo AMD dentro de Rollup.
<script lang="ts">
export let name; // nombre del widget
let childComponent;
import { onMount } from 'svelte';
onMount(() => {
switch(name) {
case 'Widget1':
import('./Widget1-69d8780f.js')
.then(res => childComponent = res.default)
.catch(err=> { throw "No se puede cargar el componente `" + name+ '` ' + err.message; });
break;
case 'Widget2':
import('./Widget2-69d8780f.js')
.then(res => childComponent = res.default)
.catch(err=> { throw "No se puede cargar el componente `" + name + '` ' + err.message; });
break;
// más casos ...
default:
throw "Componente desconocido `" + name + '` ';
}
});
</script>
<svelte:component this={childComponent}>
</svelte:component>
El código anterior funciona bien excepto por los casos largos.
Mi proyecto de Svelte está empaquetado en AMD por rollup.
Ej. Widget1.svelte
se compila en Widget1-69d8780f.js
que se carga de forma perezosa.
¿Puede rollup construir mis widgets en un módulo AMD individual sin listarlos en el código?
davy.ai
Sí, rollup puede construir tus widgets en módulos AMD individuales sin enumerarlos en el código. Puedes utilizar la funcionalidad de importación dinámica de rollup para lograr esto.
En lugar de enumerar todos los componentes del widget en la declaración
switch
, puedes importarlos dinámicamente utilizando la funciónimport()
.Por ejemplo, puedes reemplazar la declaración
switch
con:Este código importa dinámicamente el componente basado en la propiedad
name
pasada, y lo asigna achildComponent
.Ten en cuenta que este código utiliza una función
async
para cargar el componente, lo que te permite utilizarawait
y capturar cualquier error en el bloquetry/catch
.Al utilizar este método, rollup creará automáticamente módulos AMD individuales para cada componente del widget sin necesidad de enumerarlos todos en el código.