logologo
Começar
Manual
Desenvolvimento
Plugins
API
Início
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Começar
Manual
Desenvolvimento
Plugins
API
Início
logologo
Visão geral do RunJS
Importando módulos
Renderização no contêiner

Variáveis globais

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.request()
Next Pagectx.resource
Aviso de tradução por IA

Este documento foi traduzido por IA. Para informações precisas, consulte a versão em inglês.

#ctx.requireAsync()

Carrega assincronamente scripts UMD/AMD ou montados globalmente via URL, bem como CSS. É adequado para cenários de RunJS que exigem bibliotecas UMD/AMD como ECharts, Chart.js, FullCalendar (versão UMD) ou plugins jQuery; passar um endereço .css carregará e injetará o estilo. Se uma biblioteca também fornecer uma versão ESM, priorize o uso de ctx.importAsync().

#Casos de Uso

Pode ser usado em qualquer cenário de RunJS onde scripts UMD/AMD/globais ou CSS precisem ser carregados sob demanda, como JSBlock, JSField, JSItem, JSColumn, fluxo de trabalho, JSAction, etc. Usos típicos: gráficos ECharts, Chart.js, FullCalendar (UMD), dayjs (UMD), plugins jQuery, etc.

#Definição de Tipo

requireAsync<T = any>(url: string): Promise<T>;

#Parâmetros

ParâmetroTipoDescrição
urlstringO endereço do script ou CSS. Suporta abreviação <nome-do-pacote>@<versão>/<caminho-do-arquivo> (adiciona ?raw para o arquivo UMD original quando resolvido via CDN ESM) ou uma URL completa. Carrega e injeta estilos se um arquivo .css for passado.

#Valor de Retorno

  • O objeto da biblioteca carregada (o primeiro valor do módulo do callback UMD/AMD). Muitas bibliotecas UMD se anexam ao window (ex: window.echarts), portanto, o valor de retorno pode ser undefined. Nesses casos, acesse a variável global conforme a documentação da biblioteca.
  • Retorna o resultado de loadCSS quando um arquivo .css é passado.

#Descrição do Formato de URL

  • Caminho abreviado: ex: echarts@5/dist/echarts.min.js. Sob o CDN ESM padrão (esm.sh), ele solicitará https://esm.sh/echarts@5/dist/echarts.min.js?raw. O parâmetro ?raw é usado para obter o arquivo UMD original em vez de um wrapper ESM.
  • URL completa: Qualquer endereço de CDN pode ser usado diretamente, como https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js.
  • CSS: Uma URL terminada em .css será carregada e injetada na página.

#Diferença para o ctx.importAsync()

  • ctx.requireAsync(): Carrega scripts UMD/AMD/globais. Adequado para ECharts, Chart.js, FullCalendar (UMD), plugins jQuery, etc. As bibliotecas geralmente se anexam ao window após o carregamento; o valor de retorno pode ser o objeto da biblioteca ou undefined.
  • ctx.importAsync(): Carrega módulos ESM e retorna o namespace do módulo. Se uma biblioteca fornecer ESM, use ctx.importAsync() para melhor semântica de módulo e Tree-shaking.

#Exemplos

#Uso Básico

// Caminho abreviado (resolvido via CDN ESM como ...?raw)
const echarts = await ctx.requireAsync('echarts@5/dist/echarts.min.js');

// URL completa
const dayjs = await ctx.requireAsync('https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js');

// Carrega CSS e injeta na página
await ctx.requireAsync('https://cdn.example.com/theme.css');

#Gráfico ECharts

const container = document.createElement('div');
container.style.height = '400px';
container.style.width = '100%';
ctx.render(container);

const echarts = await ctx.requireAsync('echarts@5/dist/echarts.min.js');
if (!echarts) throw new Error('Biblioteca ECharts não carregada');

const chart = echarts.init(container);
chart.setOption({
  title: { text: ctx.t('Visão Geral de Vendas') },
  series: [{ type: 'pie', data: [{ value: 1, name: ctx.t('A') }] }],
});
chart.resize();

#Gráfico de Barras Chart.js

async function renderChart() {
  const loaded = await ctx.requireAsync('chart.js@4.4.0/dist/chart.umd.min.js');
  const Chart = loaded?.Chart || loaded?.default?.Chart || loaded?.default;
  if (!Chart) throw new Error('Chart.js não carregado');

  const container = document.createElement('canvas');
  ctx.render(container);

  new Chart(container, {
    type: 'bar',
    data: {
      labels: ['A', 'B', 'C'],
      datasets: [{ label: ctx.t('Quantidade'), data: [12, 19, 3] }],
    },
  });
}
await renderChart();

#dayjs (UMD)

const dayjs = await ctx.requireAsync('dayjs@1/dayjs.min.js');
console.log(dayjs?.default || dayjs);

#Observações

  • Formato do valor de retorno: Os métodos de exportação UMD variam; o valor de retorno pode ser o objeto da biblioteca ou undefined. Se for undefined, acesse-o via window de acordo com a documentação da biblioteca.
  • Dependência de rede: Requer acesso a um CDN. Em ambientes de rede interna, você pode apontar para um serviço próprio através de ESM_CDN_BASE_URL.
  • Escolha entre importAsync: Se uma biblioteca fornecer tanto ESM quanto UMD, priorize o ctx.importAsync().

#Relacionados

  • ctx.importAsync() - Carrega módulos ESM, adequado para Vue, dayjs (ESM), etc.
  • ctx.render() - Renderiza gráficos e outros componentes em um contêiner.
  • ctx.libs - React, antd, dayjs integrados, etc., sem necessidade de carregamento assíncrono.