NPMパッケージからOracle Datase 23aiのMLEモジュールを作成する
https://apexugj.blogspot.com/2024/05/simple-mle-module-manager.html
Resolve Onceをクリックします。
UNPKGも?moduleを付けるとESモジュールを取得できるみたいなので、jsDelivrと同じ作業ができるようにPL/SQLパッケージを作成しました。コードは本記事に末尾に添付します。
ただし、結果としてはUNPKGに記載のある通り、very experimental な感じで、あまり使い道はなかったです。 UNPKGの記載です。
Query Parameters
?meta
- Return metadata about any file in a package as JSON (e.g.
/any/file?meta
) ?module
- Expands all “bare”
import
specifiers in JavaScript modules to unpkg URLs. This feature is very experimental
ESモジュールの提供元として、jsDelivrとUNPKGの切り替えを実装したAPEXアプリケーションのエスクポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/mle-module-manager%2Bords-handler.zip
APEXアプリケーションを実行し、UNPKGからパッケージcjstoesmをロードしています。
操作手順はjsDelivrと同じです。
作業を始めるにあたってNPM Providerにunpkgを選択します。Initをクリックし、ESモジュールの情報を保持するAPEXコレクションを初期化します。
Module Nameにインポート対象としてcjstoesmを設定し、MLE EnvにTESTENVを設定します。
Add Es Moduleをクリックします。
UNPKGからcjstoesmのモジュールのソースを含む情報を、APEXコレクションに取り込みます。
ロードしたモジュール(StatusがLOADED)のソースを解析し、参照しているモジュールをAPEXコレクションに追加します。解析が終わったモジュールのStatusはRESOLVEDに変わります。新たにロードされたモジュールのStatusはLOADEDです。
モジュールのStatusがVALIDであっても、そのモジュールの中で存在しないモジュールを参照していると、モジュールのインポート時(await importでの呼び出し時)にエラーが発生します。
ナビゲーション・メニューよりImportsを開き、MLE環境にインポート可能なモジュールとして追加されたMLEモジュールを確認します。
ロードされたモジュールがすべて解析される(StatusがRESOLVED)まで、Resolve Onceを繰り返します。
バージョン番号が取れないモジュールは、モジュールのソースの取得に失敗しています。その場合、StatusはLOADEDのままでRESOLVEDに変わりません。
Create Mle Modulesをクリックします。
それぞれのモジュールのStatusが、VALIDまたはINVALIDに変わります。INVALIDの場合は、大抵、UNPKGが「Package XXX does not contain an ES module」というレスポンスを返しています。そのレスポンスが、MLE Moduleのソースとして扱われていることがINVALIDの原因です。
依存関係のない単体で利用可能なESモジュールであれば、利用可能なMLEモジュールを作ることができます。実際には、そのようなESモジュールは稀でしょう。
Add Importsをクリックすると、StatusがVALIDのモジュールをMLE環境にインポート可能なモジュールとして追加します。
ほとんどのケース(おそらくjsDelivrで失敗してUNPKGで成功するケースは無い)でjsDelivrの方がUNPKGより、動作するMLEモジュールを生成します。これは、jsDelivrではRollupやTerserを呼び出し、参照しているファイルをバンドルしているためです。
MLEモジュールの作成には失敗しますが、UNPKGにも良い点があります。
jsDelivrはRollupなどを呼び出してソースを生成しているため、ソースの可読性はとても低いです。UNPKGでは元のソースのimport文の置き換えを実施している程度なので、ソースは比較的読みやすいです。コードを改変することで、MLEモジュールとして動作させるつもりであれば、UNPKGから作成したMLE Moduleの方が扱いやすいでしょう。
今回の記事は以上です。
完
パッケージUTL_MLE_NPM2の定義部(UTL_MLE_NPMと同一)
パッケージ本体