2024年7月19日金曜日

unpkg.comからESモジュールを取得しOracle Database 23aiのMLEモジュールを作成する

以前にjsDelivrよりESモジュールを取得し、それを元にOracle Database 23aiのMLEモジュールを作成するAPEXアプリケーションを作っています。

NPMパッケージからOracle Datase 23aiのMLEモジュールを作成する
https://apexugj.blogspot.com/2024/05/simple-mle-module-manager.html

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 Providerunpkgを選択します。Initをクリックし、ESモジュールの情報を保持するAPEXコレクションを初期化します。

Module Nameにインポート対象としてcjstoesmを設定し、MLE EnvTESTENVを設定します。


Add Es Moduleをクリックします。

UNPKGからcjstoesmのモジュールのソースを含む情報を、APEXコレクションに取り込みます。


Resolve Once
をクリックします。

ロードしたモジュール(StatusLOADED)のソースを解析し、参照しているモジュールをAPEXコレクションに追加します。解析が終わったモジュールのStatusRESOLVEDに変わります。新たにロードされたモジュールのStatusはLOADEDです。


ロードされたモジュールがすべて解析される(StatusRESOLVED)まで、Resolve Onceを繰り返します。

バージョン番号が取れないモジュールは、モジュールのソースの取得に失敗しています。その場合、StatusはLOADEDのままでRESOLVEDに変わりません。

Create Mle Modulesをクリックします。


それぞれのモジュールのStatusが、VALIDまたはINVALIDに変わります。INVALIDの場合は、大抵、UNPKGが「Package XXX does not contain an ES module」というレスポンスを返しています。そのレスポンスが、MLE Moduleのソースとして扱われていることがINVALIDの原因です。


モジュールのStatusVALIDであっても、そのモジュールの中で存在しないモジュールを参照していると、モジュールのインポート時(await importでの呼び出し時)にエラーが発生します。


依存関係のない単体で利用可能なESモジュールであれば、利用可能なMLEモジュールを作ることができます。実際には、そのようなESモジュールは稀でしょう。

Add Importsをクリックすると、StatusVALIDのモジュールをMLE環境にインポート可能なモジュールとして追加します。


ナビゲーション・メニューよりImportsを開き、MLE環境にインポート可能なモジュールとして追加された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と同一)



パッケージ本体