Bundler 1.xと2.xの間の変更点
この記事では、liferay-npm-bundlerバージョン1.xと2.xの主な変更点について概説します。
AMD用のモジュールの自動フォーマット
バンドラーのバージョンシリーズ1.xでは、プロジェクトモジュールをAMD define()
呼び出しでラップするのは開発者の責任でした。 ただし、2.xからはバンドラーがそれを行うようになります。唯一の必要条件は、プロジェクトのコードがCommonJSモジュールモデル(モジュールをロードするためにrequire()
呼び出しを使用するNode.jsでのモジュール処理の標準モデル)用にトランスパイル/記述されていることです。
プロジェクトの依存関係の分離
バンドルのバージョン2.0.0以降、パッケージ名にはバンドル名のプレフィックスが付いていますが、以前のバージョンではそのまま残っていました。 この戦略は、異なるバンドルからパッケージを分離するために使用されます。 バンドラー1.xパッケージを(プレフィックスなしで)引き続きデプロイでき、それらは以前のバージョンのバンドラーと同じように機能します。
ピア依存関係サポートの改善
bundler 1.xでは、ウィジェット間で使用できる共有ピア依存パッケージは1つだけでした。 ウィジェットごとに独立した依存関係があるため、ピアの依存関係を完全に尊重することができます。 ピアの依存関係は、プロジェクトの名前の前にプロジェクトの名前が付いているため、プロジェクトで述べられているとおりに解決できます。 これは、 liferay-npm-bundler-plugin-inject-peer-dependencies プラグインがあるために可能です。 すべてのJSモジュールは、必要な呼び出しをスキャンします。 バンドラーが必要なパッケージを main.js
ファイルで見つけたが、 package.json
で宣言されていない場合は、 node_modules
フォルダで見つかった適切なバージョンに解決します。 次にプラグインは、新しい依存関係を必要なパッケージの出力 package.json
に挿入します。
挿入された依存バージョンの制約は、キャレットやその他のセマンティックバージョンの演算子なしで必要な特定のバージョン番号であることに注意してください。 これは、プロジェクトで見つかった正確なピア依存関係を尊重するためです。 より砕けたセマンティックバージョンの式を挿入すると、結果が不安定になる可能性があります。
インポートによる手動での重複除外
名前空間とは、各ウィジェットが独自の依存関係を取得することを意味します。 この方法でのみバンドラーを使用すると、webpackやBrowserifyなどの標準のバンドラーと同じ機能が得られるため、liferay-npm-bundlerなどの特定のツールは必要ありません。 Liferay Portalはウィジェットベースのアーキテクチャであるため、異なるウィジェット間で依存関係を共有することは非常に有益です。
bundler 1.xでは、重複排除は自動的に行われましたが、それを制御することはできませんでした。 ただし、バージョン2.xでは、独自のパッケージを使用する代わりに、外部のOSGiバンドルからパッケージをインポートできるようになりました。 これにより、共有された依存関係を1つのプロジェクトに配置し、残りのプロジェクトから参照できます。 この新しい重複除外の方法は自動ではありませんが、各パッケージの解決方法を(ビルド時に)完全に制御できます。
liferay-npm-bundlerのバージョン 1.x と 2.x の間で何が変更されたかを理解したところで、 1.xから2.xへのliferay-npm-bundlerプロジェクトの移行 に記載されている手順に従って、1.xプロジェクトを2.xに移行できます。