javascript でモジュラー フレームワークを開発しており、一連の javascript をプリコンパイル ステップとして自動的に最適化/結合する方法を探しています。
私はすでにうなり声を使用しているので、うなり声タスクはおそらく理にかなっています。
フレームワークは、独自のファイル内のモジュールで構成され (私たちが慣れ親しんでいる長方形の「ウィジェット」のように)、他の JavaScript が必要になる場合があります。
これはすべて、うまく機能する Require.js を使用して接続されています。ただし、require.jsに付属するr.jsを使用しようとすると、次の制約に遭遇しました
オプティマイザーは、最上位の require および define 呼び出し、または単純化された CommonJS ラッピングでの require('name') 文字列リテラル呼び出しに渡される文字列リテラルの配列で指定されたモジュールのみを結合します。したがって、変数名を介してロードされたモジュールは見つかりません。
問題は、モジュールが相互に継承する可能性があり、構成によって他のモジュールを構成することさえ可能です (独自の js ファイルにある参照モジュールをロードする技術的な必要性があるため)。
これは、上記の制約では機能しません。時間さえあれば自分で料理を作ることもできると思いますが、誰かがすでにこのようなことをしているかもしれません。(r.js ですが、より柔軟です)。
実行可能な解決策は次のとおりです。
- precompile-task に、js を一度最適化する必要があるページを実行させます (ただし、クライアントではなくノードのサーバーで、フレームワークはこれを実行できます)。
- そして、require.jsによってロードされたすべてのライブラリを何らかの方法で追跡します
- どういうわけかrequire.jsを読むと、ロードするjsスクリプトのリストがあります。
- これを r.js に渡し
include
、r.js がそこから処理します。 - ところで、より多くのページタイプがあります。しかし、r.js では共通ライブラリを定義できるように思われるため、それらはページごとに最適化されたファイルには含まれません。
これはもっともらしく聞こえますか?誰もこのようなことを試したことがありますか?