logologo
スタート
マニュアル
開発
プラグイン
API
ホーム
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
スタート
マニュアル
開発
プラグイン
API
ホーム
logologo
RunJS 概要
モジュールのインポート
コンテナ内でのレンダリング

グローバル変数

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
AI翻訳通知

このドキュメントはAIによって翻訳されました。正確な情報については英語版をご参照ください。

#ctx.requireAsync()

URL を指定して UMD/AMD またはグローバルにマウントされるスクリプトを非同期で読み込みます。CSS の読み込みも可能です。ECharts、Chart.js、FullCalendar(UMD 版)、jQuery プラグインなどの UMD/AMD ライブラリを RunJS で使用する場合に適しています。ライブラリが ESM バージョンも提供している場合は、ctx.importAsync() を優先して使用してください。

#適用シーン

RunJS 内で UMD/AMD/グローバルスクリプト、または CSS をオンデマンドで読み込む必要があるすべてのシーンで使用できます。例:JSBlock、JSField、JSItem、JSColumn、ワークフロー、JSAction など。典型的な用途:ECharts、Chart.js、FullCalendar (UMD)、dayjs (UMD)、jQuery プラグインなど。

#型定義

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

#パラメータ

パラメータ型説明
urlstringスクリプトまたは CSS のアドレス。短縮表記 <パッケージ名>@<バージョン>/<ファイルパス>(ESM CDN 経由で解析される際、オリジナルの UMD ファイルを取得するために ?raw が付与されます)またはフル URL をサポートします。.css が渡された場合は、スタイルを読み込み、注入します。

#戻り値

  • 読み込まれたライブラリのオブジェクト(UMD/AMD コールバックの最初のモジュール値)。多くの UMD ライブラリは window にアタッチされるため(例:window.echarts)、戻り値が undefined になる場合があります。その場合は、ライブラリのドキュメントに従ってグローバル変数にアクセスしてください。
  • .css が渡された場合は、loadCSS の結果を返します。

#URL 形式の説明

  • 短縮パス: 例: echarts@5/dist/echarts.min.js。デフォルトの ESM CDN (esm.sh) では、https://esm.sh/echarts@5/dist/echarts.min.js?raw がリクエストされます。?raw は、ESM ラッパーではなくオリジナルの UMD ファイルを取得するために使用されます。
  • フル URL: https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js のように、任意の CDN アドレスを直接記述できます。
  • CSS: .css で終わる URL を渡すと、ページに読み込まれ、注入されます。

#ctx.importAsync() との違い

  • ctx.requireAsync(): UMD/AMD/グローバルスクリプトを読み込みます。ECharts、Chart.js、FullCalendar (UMD)、jQuery プラグインなどに適しています。読み込み後、ライブラリは window にアタッチされることが多く、戻り値はライブラリのオブジェクトまたは undefined になります。
  • ctx.importAsync(): ESM モジュールを読み込み、モジュールの名前空間を返します。ライブラリが ESM を提供している場合は、より優れたモジュールセマンティクスと Tree-shaking を利用できる ctx.importAsync() を優先してください。

#例

#基本的な使い方

// 短縮パス(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');

#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('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();

#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 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();

#dayjs(UMD)

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

#注意事項

  • 戻り値の形式: UMD ライブラリのエクスポート方法は様々です。戻り値がライブラリのオブジェクトである場合もあれば、undefined である場合もあります。undefined の場合は、ライブラリのドキュメントに従って window からアクセスしてください。
  • ネットワーク依存: CDN へのアクセスが必要です。イントラネット環境では、ESM_CDN_BASE_URL を使用して自前で構築したサービスを指すように設定できます。
  • importAsync との選択: ライブラリが ESM と UMD の両方を提供している場合は、ctx.importAsync() を優先してください。

#関連情報

  • ctx.importAsync() - ESM モジュールの読み込み。Vue、dayjs (ESM) などに適しています。
  • ctx.render() - チャートなどをコンテナにレンダリングします。
  • ctx.libs - React、antd、dayjs などが組み込まれており、非同期読み込みは不要です。