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 实现最简单的拖拽交互。
dnd-kit 可排序列表示例
基于 dnd-kit 的 core / sortable / utilities 实现一个支持拖拽重排的纵向排序列表。
这个示例基于 @dnd-kit/core、@dnd-kit/sortable 和 @dnd-kit/utilities,实现了一个可拖拽排序的列表,并在拖拽结束后更新顺序并提示“List reordered”。
react-big-calendar 示例
通过 react-big-calendar 与 date-fns 本地化,在当前区块中渲染一个支持事件展示的日历组件。
frappe-gantt 示例
使用 frappe-gantt 渲染一个展示任务起止时间与进度的甘特图视图。
@asseinfo/react-kanban 示例
利用 @asseinfo/react-kanban 在区块中渲染一个包含 Backlog / Doing 等列的基础看板。
注意事项
- 依赖外部网络或 CDN,内网环境需配置 ESM_CDN_BASE_URL 指向自建服务。
- 库同时提供 ESM 与 UMD 时,优先用
ctx.importAsync()获得更好的模块语义。 - 依赖 React 的库务必加
?deps=react@18.2.0,react-dom@18.2.0,版本需与页面 React 一致,否则可能报 Invalid hook call。
相关
- ctx.requireAsync():加载 UMD/AMD 或挂到全局的脚本,适合 ECharts、FullCalendar 等 UMD 库
- ctx.render():渲染内容到容器

