Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.
ctx.importAsync()
Carga dinámicamente módulos ESM o CSS mediante una URL, aplicable a diversos escenarios de RunJS. Utilice ctx.importAsync() cuando se requieran librerías ESM de terceros, y ctx.requireAsync() para librerías UMD/AMD; al pasar una dirección .css, se cargará e inyectará el estilo en la página.
Escenarios de uso
Definición de tipo
Parámetros
Valor de retorno
- Una Promesa que se resuelve con el objeto de espacio de nombres (namespace) del módulo.
Descripción del formato de URL
- ESM y CSS: Además de los módulos ESM, también se admite la carga de CSS (pase una URL
.csspara cargarla e inyectarla en la página). - Formato abreviado: Si no se configura, se utiliza https://esm.sh como prefijo CDN predeterminado. Por ejemplo,
vue@3.4.0solicita en realidadhttps://esm.sh/vue@3.4.0. - ?deps: Las librerías que dependen de React (como
@dnd-kit/core,react-big-calendar) deben añadir?deps=react@18.2.0,react-dom@18.2.0para evitar conflictos con la instancia de React de la página, lo que podría causar errores de "Invalid hook call". - CDN propio: Puede especificar una red interna o un servicio autohospedado mediante variables de entorno:
- ESM_CDN_BASE_URL: Dirección base del CDN ESM (por defecto
https://esm.sh). - ESM_CDN_SUFFIX: Sufijo opcional (por ejemplo,
/+esmpara jsDelivr). - Para servicios autohospedados, consulte: nocobase/esm-server
- ESM_CDN_BASE_URL: Dirección base del CDN ESM (por defecto
Diferencia con ctx.requireAsync()
- ctx.importAsync(): Carga módulos ESM y devuelve el espacio de nombres del módulo. Es adecuado para librerías modernas (compilaciones ESM como Vue, dayjs, etc.).
- ctx.requireAsync(): Carga módulos UMD/AMD o scripts que se adjuntan al ámbito global. Se utiliza frecuentemente para librerías UMD como ECharts o FullCalendar. Si una librería ofrece tanto ESM como UMD, se prefiere
ctx.importAsync().
Ejemplos
Uso básico
Demuestra el uso más básico de la carga dinámica de módulos ESM y CSS mediante el nombre del paquete o una URL completa.
Ejemplo de ECharts
Utiliza ECharts para dibujar un gráfico de resumen de ventas con diagramas de barras y líneas.
Ejemplo de Tabulator
Muestra cómo renderizar una tabla de datos con paginación y eventos de clic en filas dentro de un bloque usando Tabulator.
Ejemplo de FullCalendar (ESM)
Muestra cómo cargar FullCalendar y sus plugins mediante ESM y renderizar un calendario básico con vista mensual.
Ejemplo simple de arrastrar y soltar con dnd-kit
Utiliza @dnd-kit/core para implementar un ejemplo mínimo de arrastrar una caja (Box) a un área de destino dentro de un bloque.
Este ejemplo depende únicamente de @dnd-kit/core para activar una notificación cuando se suelta una caja en un área específica, demostrando la interacción más sencilla de arrastrar y soltar combinando ctx.importAsync y React en RunJS.
Ejemplo de lista ordenable con dnd-kit
Implementa una lista de ordenación vertical utilizando core, sortable y utilities de dnd-kit.
Este ejemplo utiliza @dnd-kit/core, @dnd-kit/sortable y @dnd-kit/utilities para implementar una lista ordenable que actualiza su orden y muestra el mensaje "List reordered" después de arrastrar.
Ejemplo de react-big-calendar
Renderiza un componente de calendario que admite la visualización de eventos en el bloque actual utilizando react-big-calendar y date-fns para la localización.
Ejemplo de frappe-gantt
Utiliza frappe-gantt para renderizar una vista de gráfico de Gantt que muestra los tiempos de inicio/fin y el progreso de las tareas.
Ejemplo de @asseinfo/react-kanban
Utiliza @asseinfo/react-kanban para renderizar un tablero Kanban básico con columnas como Backlog y Doing dentro de un bloque.
Notas
- Esta funcionalidad depende de una red externa o CDN. En entornos de red interna, se debe configurar ESM_CDN_BASE_URL para que apunte a un servicio autohospedado.
- Cuando una librería proporcione tanto ESM como UMD, prefiera
ctx.importAsync()para obtener una mejor semántica de módulos. - Para librerías que dependan de React, asegúrese de añadir
?deps=react@18.2.0,react-dom@18.2.0. La versión debe coincidir con la versión de React utilizada por la página; de lo contrario, puede producirse un error de "Invalid hook call".
Relacionado
- ctx.requireAsync(): Carga módulos UMD/AMD o scripts adjuntos globalmente, adecuado para librerías UMD como ECharts y FullCalendar.
- ctx.render(): Renderiza contenido en un contenedor.

