docs/docs/cn/runjs/context/require-async.md
按 URL 异步加载 UMD/AMD 或挂载到全局的脚本,也可加载 CSS。适用于需使用 ECharts、Chart.js、FullCalendar(UMD 版)、jQuery 插件等 UMD/AMD 库的 RunJS 场景;传入 .css 地址会加载并注入样式。若库同时提供 ESM 版本,优先使用 ctx.importAsync()。
凡 RunJS 中需按需加载 UMD/AMD/global 脚本或 CSS 的场景均可使用,如 JSBlock、JSField、JSItem、JSColumn、事件流、JSAction 等。典型用途:ECharts 图表、Chart.js、FullCalendar(UMD)、dayjs(UMD)、jQuery 插件等。
requireAsync<T = any>(url: string): Promise<T>;
| 参数 | 类型 | 说明 |
|---|---|---|
url | string | 脚本或 CSS 地址。支持简写 <包名>@<版本>/<文件路径>(经 ESM CDN 解析时加 ?raw 取原始 UMD 文件)或完整 URL。传入 .css 时加载并注入样式。 |
window(如 window.echarts),返回值可能为 undefined,实际使用时按库文档访问全局变量即可。.css 时返回 loadCSS 的结果。echarts@5/dist/echarts.min.js,在默认 ESM CDN(esm.sh)下会请求 https://esm.sh/echarts@5/dist/echarts.min.js?raw,?raw 用于获取原始 UMD 文件而非 ESM 包装。https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js。.css 结尾的 URL 会加载并注入页面。window,返回值可能为库对象或 undefined。ctx.importAsync() 以获得更好的模块语义与 Tree-shaking。// 简写路径(经 ESM CDN 解析为 ...?raw)
const echarts = await ctx.requireAsync('echarts@5/dist/echarts.min.js');
// 完整 URL
const dayjs = await ctx.requireAsync('https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js');
// 加载 CSS 并注入页面
await ctx.requireAsync('https://cdn.example.com/theme.css');
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('ECharts library not loaded');
const chart = echarts.init(container);
chart.setOption({
title: { text: ctx.t('销售概览') },
series: [{ type: 'pie', data: [{ value: 1, name: ctx.t('A') }] }],
});
chart.resize();
async function renderChart() {
const loaded = await ctx.requireAsync('[email protected]/dist/chart.umd.min.js');
const Chart = loaded?.Chart || loaded?.default?.Chart || loaded?.default;
if (!Chart) throw new Error('Chart.js not loaded');
const container = document.createElement('canvas');
ctx.render(container);
new Chart(container, {
type: 'bar',
data: {
labels: ['A', 'B', 'C'],
datasets: [{ label: ctx.t('数量'), data: [12, 19, 3] }],
},
});
}
await renderChart();
const dayjs = await ctx.requireAsync('dayjs@1/dayjs.min.js');
console.log(dayjs?.default || dayjs);
undefined;若为 undefined,可按库文档从 window 访问。ctx.importAsync()。