前の記事で 、フレームワークが静的にどのように機能するかを学習できます。静的には、フレームワーク専用に作成されたコンポーネントが付属しています。
同時に、Bower / NPMパッケージの形式で膨大な数のサードパーティコンポーネントがあり、フレームワークもこれを単純化し、完全に統合します。
アラメダ
Alamedaには、AMDモジュールをロードするためのフレームワークが付属しています。 フレームワーク自体がAlamedaの構成を生成するため、完全なパスなしでモジュール名を使用するだけで必要なモジュールを呼び出すことができます。
フレームワークモジュール用のAMDモジュール
トートロジーについては申し訳ありませんが、そのように聞こえます。 必要になる前にページに不要なコードをロードしないために、AMDモジュールをフレームワークモジュールで使用することもできます。
ここでは次の操作が行われます。
- JavaScriptファイルを使用したフレームワークのすべてのモジュール(
modules/*/assets/js
ディレクトリの存在が確認されます) - モジュールの名前とそれが提供する各機能のエイリアスが作成されます(Alameda構成の
paths
オプション)
たとえば、 MyModule
モジュールのmeta.json
:
{ "package" : "MyModule", "category" : "modules", ... "provide" : "my_feature", ... }
2つのエイリアスが作成されます。
-
MyModule -> /modules/MyModule/assets/js
-
my_feature -> /modules/MyModule/assets/js
AMDモジュールがパスmodules/MyModule/assets/js/my_module.js
にある場合、たとえばmy_feature/my_module
として呼び出すことができます。 便利なことに、1つのAMDモジュールの代替実装が複数ある場合、インストールされているものがこの場合に使用されます。
BowerパッケージのAMDモジュール
フレームワークがサイトのルートにあるbower_components
ディレクトリのコンテンツをスキャンする場合、検出された各パッケージのAlameda構成(オプションpackages
構成Alameda)を次の形式で生成します。
{ "name" : "jquery", "main" : "dist/jquery", "location" : "/bower_components/jquery" }
パッケージの生成により、jQueryのような単一のファイルからのモジュールだけでなく、 lodash-amd
ようなより複雑な構成もサポートできます。ここでは、ライブラリ全体ではなく、その一部のみをロードできます(フレームワークの古いバージョンではエイリアスのみを生成できます)。
ディレクトリの名前はモジュールの名前なので、jQueryはjquery
として使用できます。
main
キーで使用するファイルを理解するために、 bower.json
の同じ名前のキーbower.json
(ファイルの配列が指定されている場合は最初のJavaScriptファイル)。
NPMパッケージのAMDモジュール
bower_components
と同様に、フレームワークはnode_modules
ディレクトリも分析します。
package.json
の分析はより複雑です。これは、多くのパッケージが主にNode.jsで使用するためのものだからです。
ブラウザ環境で使用するのに適したファイルを見つけるために、フレームワークはpackage.json
で次のキーを優先度の高いものから低いものの順に試します。
-
browser
-
jspm.main
-
main
使用の過程で、これをまだサポートしていないパッケージ( Redux 、 seamless-immutable )のPRを行わなければならない場合があります。
フレームワークモジュールの依存関係としてのBower / NPMパッケージ
フレームワークにはオプションのComposer assets
モジュールがあり、 meta.json
キーrequire_bower
およびrequire_npm
フレームワークモジュールのBower / NPM依存関係を宣言的に指定できます。
これらの依存関係は、対応するモジュールに対して自動的にインストールされます。これにより、サーバー上のターミナルへのアクセスもインストールされたNode.jsも必要ありません。競合がある場合、モジュールのインストールは中断されます。つまり、統合が完全になります。
次のようになります。
{ ... "require" : [ "System>=6.25", "System<7.0", "composer_assets" ], "require_npm" : { "qrcodejs" : { "version" : "1.0.0", "files" : [ "qrcode.js" ] } } }
まず、必要なキーのサポートが追加されるため、 composer_assets
機能への依存を示す必要があります。これがないと、フレームワークはrequire_npm
何であるかを理解しません。
第二に、必要なモジュールと(オプションで)接続する必要があるファイルを指定する必要があります。
実際、フレームワークはデフォルトでパッケージにAMDモジュールが含まれていると見なし、上記と同様の構成を生成します。 ただし、単純なJavaScriptファイル、スタイルシート、またはWebコンポーネントを接続する必要がある場合があります。
AMDモジュールのみが必要な場合は、構成を次のように簡素化できます。
{ ... "require_npm" : { "jquery" : "^3.0.0" } }
統合の重要なポイントの1つは、パスbower_components
およびnode_modules
沿ってComposer assets
を介してインストールされたパッケージのエイリアスのサポートです。 つまり、jQueryはパス/node_modules/jquery/dist/jquery.js
に沿った最後のスニペットからアクセスできますが、ファイルは物理的にパス/storage/Composer/vendor/npm-assets/jquery/dist/jquery.js
に沿って配置されます。
生産モード
フレームワーク設定で静的のキャッシングと圧縮を有効にすると、 {require_npm|require_bower}.*.files
からのファイル{require_npm|require_bower}.*.files
はフレームワークモジュールで提供されるファイルと同じ処理を受けるため、サポートされる最適化のほとんどがここに適用されます。
「野生」の多くのパッケージの典型的なものは、通常の組み立てられたモジュールとその縮小バージョンの保守です( bower.json
とpackage.json
には、通常のものが示されています)。 したがって、 dist/jquery.js
は、実際にはdist/jquery.min.js
ではなくdist/jquery.min.js
がロードされます。
アラメダのカスタムバージョン
残念ながら、多くの場合、フレームワークにはサードパーティプロジェクトのカスタマイズされたビルド、この場合はカスタムバージョンのAlamedaが付属しています。
オリジナルの問題は、「ワイルド」には完全に正しく形成されていないモジュールがあり、Alamedaがパッチなしでサポートすることを拒否していることです。カスタムバージョンはそのようなモジュールをロードできるため、そうでなければ手動で設定する必要がなくなります。
そのような不正の例ですが、現在フレームワークモジュールでサポートされています
define('inline-styles-formatter',[], function () { ... }); define('as-html-formatter',[], function () { ... }); define('scribe-plugin-inline-styles-to-elements',[ './inline-styles-formatter', './as-html-formatter' ], function ( inlineStylesFormatter, asHtmlFormatter ) { ... });
Alameda開発者との状況の議論はここで見つけることができます 、そして、望ましい機能を備えたフォークはここにあります 。
最後に
ご覧のとおり、フレームワークはBower / NPMパッケージをインストールする標準的な方法と完全に統合され、フレームワークモジュールの依存関係のレベルでそれらをサポートします。
AMDパッケージ構成は、正しく構成されたパッケージの大部分に対して自動的に生成されます。
新しいアイデアと建設的なコメントに常に満足しています。