Este documento foi traduzido por IA. Para informações precisas, consulte a versão em inglês.
ctx.importAsync()
Carrega dinamicamente módulos ESM ou CSS via URL, aplicável a vários cenários do RunJS. Use ctx.importAsync() quando bibliotecas ESM de terceiros forem necessárias, e ctx.requireAsync() para bibliotecas UMD/AMD; passar um endereço .css carregará e injetará os estilos na página.
Cenários de uso
Definição de tipo
Parâmetros
Valor de retorno
- Uma Promise que resolve para o objeto de namespace do módulo.
Descrição do formato da URL
- ESM e CSS: Além de módulos ESM, o carregamento de CSS também é suportado (passe uma URL
.csspara carregá-la e injetá-la na página). - Formato Abreviado: Por padrão, utiliza https://esm.sh como prefixo do CDN se não estiver configurado. Por exemplo,
vue@3.4.0na verdade solicitahttps://esm.sh/vue@3.4.0. - ?deps: Bibliotecas que dependem do React (como
@dnd-kit/core,react-big-calendar) devem adicionar?deps=react@18.2.0,react-dom@18.2.0para evitar conflitos com a instância do React da página, o que poderia levar a erros de "Invalid hook call". - CDN Próprio: Você pode especificar uma rede interna ou serviço próprio através de variáveis de ambiente:
- ESM_CDN_BASE_URL: URL base para o CDN ESM (padrão é
https://esm.sh). - ESM_CDN_SUFFIX: Sufixo opcional (ex:
/+esmpara o jsDelivr). - Para serviços próprios, consulte: nocobase/esm-server
- ESM_CDN_BASE_URL: URL base para o CDN ESM (padrão é
Diferença de ctx.requireAsync()
- ctx.importAsync(): Carrega módulos ESM e retorna o namespace do módulo. Adequado para bibliotecas modernas (builds ESM como Vue, dayjs, etc.).
- ctx.requireAsync(): Carrega módulos UMD/AMD ou scripts que se anexam ao escopo global. Frequentemente usado para bibliotecas UMD como ECharts ou FullCalendar. Se uma biblioteca fornecer tanto ESM quanto UMD,
ctx.importAsync()é preferível.
Exemplos
Uso básico
Demonstra o uso mais básico do carregamento dinâmico de módulos ESM e CSS por nome de pacote ou URL completa.
Exemplo com ECharts
Usa o ECharts para desenhar um gráfico de visão geral de vendas com gráficos de barras e linhas.
Exemplo com Tabulator
Demonstra a renderização de uma tabela de dados com paginação e eventos de clique em linha em um bloco usando o Tabulator.
Exemplo com FullCalendar (ESM)
Mostra como carregar o FullCalendar e seus plugins via ESM e renderizar um calendário básico com visualização mensal.
Exemplo simples de Drag-and-Drop com dnd-kit
Usa o @dnd-kit/core para implementar um exemplo mínimo de arrastar um Box para uma área de destino dentro de um bloco.
Este exemplo depende apenas do @dnd-kit/core para disparar uma notificação quando um Box é solto em uma área específica, demonstrando a interação de arrastar e soltar mais simples combinando ctx.importAsync + React no RunJS.
Exemplo de lista ordenável com dnd-kit
Implementa uma lista ordenável vertical usando o core, sortable e utilities do dnd-kit.
Este exemplo utiliza @dnd-kit/core, @dnd-kit/sortable e @dnd-kit/utilities para implementar uma lista ordenável que atualiza sua ordem e exibe uma mensagem "List reordered" após o arrasto.
Exemplo com react-big-calendar
Renderiza um componente de calendário que suporta a exibição de eventos no bloco atual usando react-big-calendar e date-fns para localização.
Exemplo com frappe-gantt
Usa o frappe-gantt para renderizar uma visualização de gráfico de Gantt mostrando os horários de início/fim das tarefas e o progresso.
Exemplo com @asseinfo/react-kanban
Utiliza o @asseinfo/react-kanban para renderizar um quadro Kanban básico com colunas como Backlog e Doing dentro de um bloco.
Observações
- Esta funcionalidade depende de uma rede externa ou CDN. Em ambientes de rede interna, o ESM_CDN_BASE_URL deve ser configurado para apontar para um serviço próprio.
- Quando uma biblioteca oferece tanto ESM quanto UMD, prefira
ctx.importAsync()para obter uma melhor semântica de módulos. - Para bibliotecas que dependem do React, certifique-se de adicionar
?deps=react@18.2.0,react-dom@18.2.0. A versão deve corresponder à versão do React usada pela página, caso contrário, um erro "Invalid hook call" pode ocorrer.
Relacionado
- ctx.requireAsync(): Carrega scripts UMD/AMD ou globais, adequado para bibliotecas UMD como ECharts e FullCalendar.
- ctx.render(): Renderiza conteúdo em um contêiner.

