ctx.importAsync()
按 URL 动态加载 ESM 模块或 CSS,适用于 RunJS 各场景。需要第三方 ESM 库时使用 ctx.importAsync(),UMD/AMD 库使用 ctx.requireAsync();传入 .css 地址会加载并注入样式。
适用场景
类型定义
参数
返回值
- 解析后的模块命名空间对象(Promise 解析值)。
URL 格式说明
- ESM 与 CSS:除 ESM 模块外,也支持加载 CSS(传入
.cssURL,加载后注入页面)。 - 简写格式:未配置时使用 https://esm.sh 作为 CDN 前缀。例如
vue@3.4.0实际请求https://esm.sh/vue@3.4.0。 - ?deps:依赖 React 的库(如
@dnd-kit/core、react-big-calendar)需加?deps=react@18.2.0,react-dom@18.2.0,避免与页面 React 实例冲突导致 Invalid hook call。 - 自建 CDN:可通过环境变量指定内网或自建服务:
- ESM_CDN_BASE_URL:ESM CDN 基础地址(默认
https://esm.sh) - ESM_CDN_SUFFIX:可选后缀(如 jsDelivr 的
/+esm) - 自建服务可参考:nocobase/esm-server
- ESM_CDN_BASE_URL:ESM CDN 基础地址(默认
与 ctx.requireAsync() 的区别
- ctx.importAsync():加载 ESM 模块,返回模块命名空间,适合现代库(Vue、dayjs 等 ESM 构建)。
- ctx.requireAsync():加载 UMD/AMD 或挂到全局的脚本,多用于 ECharts、FullCalendar 等 UMD 库。若库同时提供 ESM,优先用
ctx.importAsync()。
示例
基础用法
用于演示最基础的按包名或完整 URL 动态加载 ESM 模块和 CSS 的用法。
ECharts 示例
使用 ECharts 绘制一个带柱状图和折线图的销售概览图表。
Tabulator 示例
演示通过 Tabulator 在区块中渲染一个支持分页和行点击事件的数据表格。
FullCalendar(ESM) 示例
展示如何以 ESM 方式加载 FullCalendar 及其插件,并渲染一个基础的月视图日历。
dnd-kit 简单拖拽示例
使用 @dnd-kit/core 在区块中实现一个拖拽 Box 到目标区域的最小拖拽示例。
这个示例只依赖 @dnd-kit/core,通过拖拽一个 Box 到指定区域触发提示,演示了在 RunJS 中结合 ctx.importAsync + React 实现最简单的拖拽交互。

