バンドラー構成プリセットについて
Liferay npm バンドラーは Liferay 2024.Q4/Portal GA129 で廃止され、将来削除される予定です。
liferay-npm-bundler には、デフォルトの設定プリセットが付属しています: liferay-npm-bundler-preset-standard。 .npmbundlerrc ファイルのnpmパッケージ名から liferay-npm-bundler プレフィックスを省略できます。 このプリセットは、自分でオーバーライドしない限り、ビルドプロセス用のいくつかのプラグインを構成し、自動的に使用されます( .npmbundlerrc がない場合も)。 このプリセットを使用して liferay-npm-bundler を実行すると、 設定ファイル が liferay-npm-bundler-preset-standardから適用されます。
{
"/": {
"plugins": ["resolve-linked-dependencies"],
".babelrc": {
"presets": ["liferay-standard"]
},
"post-plugins": ["namespace-packages", "inject-imports-dependencies"]
},
"*": {
"copy-plugins": ["exclude-imports"],
"plugins": ["replace-browser-modules"],
".babelrc": {
"presets": ["liferay-standard"]
},
"post-plugins": [
"namespace-packages",
"inject-imports-dependencies",
"inject-peer-dependencies"
]
}
}
上記の構成は、すべてのnpmパッケージ(*)について、前処理フェーズ(プラグイン)が replace-browser-modules プラグインを実行する必要があることを示しています。 これを post-plugins に設定すると、代わりにポストフェーズで実行されます。
プロジェクトの .npmbundlerrc ファイルに独自の構成を追加することで、構成のプリセット値をオーバーライドできます。 たとえば、上記の設定プリセットの例を使用すると、 .babelrc ファイルに独自の .npmbundlerrc 値を定義して、定義されている "liferay-standard" babelrc プリセットを上書きできます。
Liferay標準プリセット
liferay-standard プリセット は、次のプラグインをパッケージに適用します。
-
exclude-imports:
importsセクションで宣言されたパッケージをビルドから除外します。 -
inject-imports-dependencies: 依存関係の
package.jsonファイルのimportsセクションで宣言された依存関係を注入します。 -
inject-peer-dependencies: 宣言されたピア依存関係 (プロジェクトの
node_modulesフォルダーで解決されるもの) を依存関係のpackage.jsonファイルに挿入します。 -
namespace-packages: プロジェクトごとにパッケージを分離し、衝突を回避するために、ルート プロジェクトのパッケージ名に基づいた名前空間パッケージ名。 これにより、
<project-package-name>$がpackage.jsonファイル内の各パッケージ名の先頭に追加されます。 -
replace-browser-modules:
package.jsonのbrowser/unpkg/jsdelivrセクションにリストされているモジュールのサーバー側ファイルを、対応するブラウザーのファイルに置き換えます。 -
resolve-linked-dependencies:
package.jsonファイル内 (ローカル ファイル システムや GitHub などから取得されたもの) に表示されるリンクされた依存関係のバージョンを、プロジェクトのnode_modulesディレクトリ内で解決された実際のバージョン番号に置き換えます。
Liferay Babelプリセット
バンドラーは、 babel-preset-liferay-standard プリセットを使用して Babel も実行し、次のプラグインを呼び出します。
-
babel-plugin-normalize-requires: AMD
require()呼び出しを正規化します。 -
babel-plugin-transform-node-env-inline:
NODE_ENV環境変数をインライン化し、それがバイナリ式の一部である場合 (例:process.env.NODE_ENV === "development")、静的に評価して置き換えます。 -
babel-plugin-minify-dead-code-elimination: 可能な場合はバインディングをインライン化します。 結果として式を評価しようとし、到達できないプルーニングを行います。
-
babel-plugin-wrap-modules-amd: AMD
define()モジュール内にモジュールをラップします。 -
babel-plugin-name-amd-modules: パッケージ名、バージョン、モジュール パスに基づいて AMD モジュールに名前を付けます。
-
babel-plugin-namespace-modules: ルートプロジェクトのパッケージ名に基づいて名前空間モジュールを作成し、先頭に
<project-package-name>$を付加します。 AMDdefine()モジュール内のモジュールをラップし、パッケージがプロジェクトごとにローカライズされ、クラッシュしないようにモジュール名の外観(define()またはrequire()コール)で表示します。 -
babel-plugin-namespace-amd-define: AMD
define()呼び出しにプレフィックスを追加します(デフォルトではLiferay.Loader.)。
これで、 .npmbundlerrc 使用可能な構成プリセットと、それらがどのように機能するかがわかりました。