CleverStyle FrameworkでのAlameda、Bower、およびNPMの統合

前の記事で 、フレームワークが静的にどのように機能するかを学習できます。静的には、フレームワーク専用に作成されたコンポーネントが付属しています。







同時に、Bower / NPMパッケージの形式で膨大な数のサードパーティコンポーネントがあり、フレームワークもこれを単純化し、完全に統合します。







アラメダ



Alamedaには、AMDモジュールをロードするためのフレームワークが付属しています。 フレームワーク自体がAlamedaの構成を生成するため、完全なパスなしでモジュール名を使用するだけで必要なモジュールを呼び出すことができます。







フレームワークモジュール用のAMDモジュール



トートロジーについては申し訳ありませんが、そのように聞こえます。 必要になる前にページに不要なコードをロードしないために、AMDモジュールをフレームワークモジュールで使用することもできます。







ここでは次の操作が行われます。









たとえば、 MyModule



モジュールのmeta.json









 { "package" : "MyModule", "category" : "modules", ... "provide" : "my_feature", ... }
      
      





2つのエイリアスが作成されます。









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



で次のキーを優先度の高いものから低いものの順に試します。









使用の過程で、これをまだサポートしていないパッケージ( Reduxseamless-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パッケージ構成は、正しく構成されたパッケージの大部分に対して自動的に生成されます。







新しいアイデアと建設的なコメントに常に満足しています。







» GitHubのリポジトリ








All Articles