OSGiバンドルとnpmパッケージ構造

OSGiバンドルとnpmパッケージ構造

JavaScriptモジュールをデプロイするには、プロジェクトの node_modules フォルダーから抽出されたnpm依存関係でOSGiバンドルを作成し、それらを Liferay AMD Loader 動作するように変更する必要があります。 liferay-npm-bundlerはこのプロセスを自動化し、以下のようなバンドルを作成します。

  • my-bundle/
    • META-INF/
      • リソース/
        • package.json
          • name: my-bundle-package
          • バージョン:1.0.0
          • main: lib/index
          • 依存関係:
            • my-bundle-package$isarray: 2.0.0
            • my-bundle-package$isobject: 2.1.0
        • lib/
          • index.js
        • node_modules/
          • [email protected]/
            • package.json
              • name: my-bundle-package$isobject
              • バージョン:2.1.0
              • main: lib/index
              • 依存関係:
                • my-bundle-package$isarray: 1.0.0
          • [email protected]/
            • package.json
              • name: my-bundle-package$isarray
              • バージョン:1.0.0
          • [email protected]/
            • package.json
              • name: my-bundle-package$isarray
              • バージョン:2.0.0

node_modules 内のパッケージはnpmツールと同じ形式で、標準の node_modules フォルダーから(AMDへの変換などの処理後に)コピーできます。 node_modules フォルダーは、任意の数のnpmパッケージ(同じパッケージの異なるバージョンであっても)を保持するか、npmパッケージをまったく保持できません。

これでnpmパッケージを含むOSGiバンドルの構造がわかったと思うので、津次はliferay-npm-bundlerがインラインJavaScriptパッケージを処理する方法について説明します。

インラインJavaScriptパッケージ

liferay-npm-bundlerが作成する結果のOSGiバンドルは、1つのインラインJavaScriptパッケージ(例では my-bundle-package という名前)と、 node_modules フォルダ内に配置された複数のnpmパッケージを、フォルダごとに1つずつデプロイするように構成されています。

インラインパッケージは、OSGi標準の META-INF/resources フォルダにネストされ、標準のnpm package.json ファイルで定義されます。

インラインパッケージはオプションですが、1つのOSGiバンドルにつき1つのインラインパッケージしか許可されません。 OSGiバンドルに含まれている場合、インラインパッケージは通常、ウィジェットのJavaScriptコードを提供します。 なお、このアーキテクチャでは、公開後のインラインパッケージとnpmパッケージを区別していません。 インラインパッケージは、組織的な目的でのみ使用されます。

これでliferay-npm-bundlerがどのようにしてnpmパッケージのOSGiバンドルを作成するかがわかりましたね。