ctx.importAsync()
Memuat modul ESM atau CSS secara dinamis berdasarkan URL, cocok untuk berbagai skenario RunJS. Saat membutuhkan library ESM pihak ketiga gunakan ctx.importAsync(), library UMD/AMD gunakan ctx.requireAsync(); meneruskan alamat .css akan memuat dan menyuntikkan style.
Skenario Penggunaan
Definisi Tipe
Parameter
Return Value
- Objek namespace modul yang sudah di-resolve (nilai resolve Promise).
Penjelasan Format URL
- ESM dan CSS: selain modul ESM, juga mendukung loading CSS (meneruskan URL
.css, di-inject ke halaman setelah loading). - Format singkat: saat tidak dikonfigurasi menggunakan https://esm.sh sebagai prefix CDN. Contoh
vue@3.4.0sebenarnya requesthttps://esm.sh/vue@3.4.0. - ?deps: library yang bergantung pada React (seperti
@dnd-kit/core,react-big-calendar) perlu menambahkan?deps=react@18.2.0,react-dom@18.2.0, untuk menghindari konflik dengan instance React halaman yang menyebabkan Invalid hook call. - CDN mandiri: dapat menentukan layanan intranet atau mandiri melalui environment variable:
- ESM_CDN_BASE_URL: alamat dasar ESM CDN (default
https://esm.sh) - ESM_CDN_SUFFIX: suffix opsional (seperti
/+esmdari jsDelivr) - Layanan mandiri dapat merujuk ke: nocobase/esm-server
- ESM_CDN_BASE_URL: alamat dasar ESM CDN (default
Perbedaan dengan ctx.requireAsync()
- ctx.importAsync(): memuat modul ESM, mengembalikan namespace modul, cocok untuk library modern (build ESM seperti Vue, dayjs).
- ctx.requireAsync(): memuat script UMD/AMD atau yang di-mount ke global, banyak digunakan untuk library UMD seperti ECharts, FullCalendar. Jika library juga menyediakan ESM, lebih utamakan
ctx.importAsync().
Contoh
Penggunaan Dasar
Untuk demo penggunaan paling dasar untuk loading dinamis modul ESM dan CSS berdasarkan nama paket atau URL lengkap.
Contoh ECharts
Menggunakan ECharts untuk menggambar chart ikhtisar penjualan dengan grafik batang dan grafik garis.
Contoh Tabulator
Demo merender tabel data yang mendukung pagination dan event klik baris di dalam block melalui Tabulator.
Contoh FullCalendar (ESM)
Menunjukkan cara memuat FullCalendar dan plugin-nya dalam bentuk ESM, dan merender kalender tampilan bulan dasar.
Contoh Drag-and-Drop Sederhana dnd-kit
Menggunakan @dnd-kit/core untuk mengimplementasikan contoh drag-and-drop minimal yang menyeret Box ke area target di dalam block.
Contoh ini hanya bergantung pada @dnd-kit/core, dengan menyeret Box ke area yang ditentukan untuk memicu tip, mendemonstrasikan interaksi drag-and-drop paling sederhana di RunJS dengan kombinasi ctx.importAsync + React.
Contoh List yang Dapat Disortir dnd-kit
Berdasarkan dnd-kit core / sortable / utilities mengimplementasikan list sortir vertikal yang mendukung drag-and-drop reorder.
Contoh ini berbasis @dnd-kit/core, @dnd-kit/sortable, dan @dnd-kit/utilities, mengimplementasikan list yang dapat di-drag dan disortir, serta memperbarui urutan dan memberi tip "List reordered" setelah drag selesai.
Contoh react-big-calendar
Melalui react-big-calendar dan lokalisasi date-fns, merender komponen kalender yang mendukung tampilan event di block saat ini.
Contoh frappe-gantt
Menggunakan frappe-gantt untuk merender tampilan grafik Gantt yang menampilkan waktu mulai/selesai task dan progress.
Contoh @asseinfo/react-kanban
Memanfaatkan @asseinfo/react-kanban untuk merender kanban dasar yang berisi kolom seperti Backlog / Doing di block.
Hal yang Perlu Diperhatikan
- Bergantung pada jaringan eksternal atau CDN, environment intranet perlu mengkonfigurasi ESM_CDN_BASE_URL mengarah ke layanan mandiri.
- Saat library menyediakan ESM dan UMD bersamaan, lebih utamakan
ctx.importAsync()untuk mendapatkan semantik modul yang lebih baik. - Library yang bergantung pada React harus menambahkan
?deps=react@18.2.0,react-dom@18.2.0, versi harus sama dengan React halaman, jika tidak mungkin akan melaporkan Invalid hook call.
Terkait
- ctx.requireAsync(): Memuat script UMD/AMD atau yang di-mount ke global, cocok untuk library UMD seperti ECharts, FullCalendar
- ctx.render(): Merender konten ke container

