web-dev-qa-db-ja.com

JavaScriptのバージョン管理と縮小のためのMavenプラグイン

単一ページJavaScriptアプリケーション

JSONを提供するRESTfulバックエンドWebサービスを使用する、洗練されたajax駆動の単一ページWebアプリケーションを作成しました。 JavaScriptは多くの異なるファイルに分割され、各ファイルはある種の機能またはコンポーネントを表します。

サービスはalphaテスト中ですが、縮小せずにこれらすべてのファイルを個別に提供しています。しかし、私はbetaバージョンを起動したいので、ファイルを結合し、それらを縮小し、バージョン管理する必要があります。 Mavenを使用して、これをビルドプロセスに追加します。

JavaScriptファイルタイプ

私は次の「タイプ」のJavaScriptファイルを使用しています。そのうちの#3と#4が問題です。

  1. Google CDNから提供されるjqueryやjquery-uiなどの外部ファイル。これらのバージョンはめったに変更されず、手動で処理できます。
  2. Fullcalendarやui-layoutなど、自分でホストしているjqueryプラグイン。繰り返しますが、これらを新しいバージョンに更新することはほとんどなく、手動で処理できます。
  3. アプリケーション全体のJavaScriptコード。多くのファイルに分散しており、時々変更される可能性があるカスタムJavaScript。アプリを機能させるには、これらすべてのファイルを読み込む必要があります。
  4. 機能固有のJavaScriptコード。特定の機能が要求されたときにオンデマンドで読み込まれるカスタムJavaScript。このコードは頻繁に変更される可能性があり、起動時に読み込まれません。

目標を作成する

ビルドプロセス中に次のことを実行したいと思います。

  • タイプ3のJavaScriptファイルをすべて連結し、それらを縮小して、バージョン番号の付いた単一のファイルとして保存します。たとえば、app-2.0.6.min.js、2.0.6はMavenプロジェクトのバージョンです。
  • タイプ4のファイルはすべて、個別に縮小して、名前にバージョン番号を含む個別のファイルとして保存する必要があります。たとえば、feature-abc-56ab32de29.min.js、ここで56ab32de29はその特定のファイルのバージョン番号です。
  • HTMLファイルを<script>タグで更新して、正しいバージョン番号のJavaScriptファイルを指すようにします。
  • タイプ4機能のJavaScriptファイルをロードするJavscriptファイルを更新して、正しいバージョンを指すようにします。

ご質問

  • 連結を支援するMavenプラグインはありますか?

  • 縮小に役立つMavenプラグインはありますか?理想的には、Google Closure Compilerを使用したいのですが、もっと簡単な場合は他のコンパイラでも動作します。

  • バージョン管理を支援するMavenプラグインはありますか?

  • タイプ4のJavaScriptファイルに独立したバージョン番号を付ける方法はありますか?理想的には、ファイルがバージョン2.0.5と2.0.6の間で変更されない場合、ユーザーが新しいバージョンをダウンロードする必要はなく、キャッシュされたバージョンは正常に機能します。ソース管理にGITを使用していますが、バージョン管理にファイルのGITハッシュコードを使用する方法はありますか?

  • HTMLを強制終了せずに、通常のHTMLファイルにインライン化されているJavaScriptを圧縮するソリューションはありますか?

  • CSSファイルも圧縮してバージョン管理するソリューションはありますか?

51
Tauren

yuicompressor-maven-plugin をご覧ください。さまざまなjs(およびcss)ファイルを集約したり、それらを縮小および難読化したりできます。

22
Taylor Leese

このタスクをターゲットとする真新しいMavenプラグインを次に示します。 http://mojo.codehaus.org/webminifier-maven-plugin/

11
Chris Dolan

(単一ページのJSアプリ用の)Maven環境にRequireJS最適化(Google Closureコンパイラーを使用+連結を行う)を正常に組み込みました。詳細については私の質問とフォローアップの回答を参照してください: 外部JS依存関係があるMavenプロジェクトでのRequireJSコンパイル

おそらくそれを拡張して、縮小されたJSアーティファクトをバージョン化してアーカイブすることができます。

3
Ates Goral