.NETベースのプロジェクトでは、しばらくの間ClosureCompilerを使用してきました。
最初は、Pythonスクリプトを直接呼び出す単純なMSBuild.projファイルを使用しました。たとえば、次のようなものでdeps.jsを作成します。
<PropertyGroup>
<ScriptDirectory>yourprojectname</ScriptDirectory>
<ClosureLibrary>closure</ClosureLibrary>
<CalcDeps>$(ClosureLibrary)\bin\calcdeps.py</CalcDeps>
</PropertyGroup>
<Target Name="Deps">
<Exec Command="$(CalcDeps) -o deps -p $(ScriptDirectory) -d $(ClosureLibrary) --output_file=$(ScriptDirectory)\deps.js" />
</Target>
実際のビルドはもっと複雑でしたが、それでも比較的簡単です(MSBuildに精通していると仮定します)。スクリプト呼び出しの関連部分ごとに、異なるタイプのアイテムグループを使用しただけです。
<Target Name="Build" DependsOnTargets="Init;FindCompiler">
<PropertyGroup Condition="'@(Extern)' != ''">
<Externs>-f --externs=@(Extern, ' -f --externs=')</Externs>
</PropertyGroup>
<PropertyGroup Condition="'@(Define)' != ''">
<Defines>-f --define=@(Define, ' -f --define=')</Defines>
</PropertyGroup>
<PropertyGroup Condition="'@(Compile)' != ''">
<Compile>-i @(Compile, ' -i ')</Compile>
</PropertyGroup>
<Exec Command="$(CalcDeps) $(Compile) -o compiled -c $(ClosureCompiler) -p $(ClosureLibrary) -p $(ScriptDirectory) $(Externs) $(Defines) -f @(CompilerOption, ' -f ') --output_file $(OutputFile)" />
</Target>
これは非常に単純だったので、わざわざタスクを探したり、独自のタスクを構築するために投資したりする必要はありませんでした。クロージャは非常に動きの速いプロジェクトであるため、サードパーティのビルドシステム、特にメンテナンスされていないように見えるシステム(リンクしたタスク)に過度に依存していない状況にあるのは良いことです。
今、私たちのビルドシステムが少し移行したので、私は過去形で話してきました。具体的には、プロジェクトが成長し続けるにつれて、スクリプトコードのさまざまな部分をモジュールに分割することがますます重要になりました。すぐに使用できるClosureスクリプトを使用してこれを行うことは、非常に悪夢です。そのため、plovr(http://plovr.com/)に移行することにしました。これにより、コードをモジュールに非常に簡単に分割できます。plovrは非常に積極的に保守されており、Closureに関する本を文字通り書いたMichael Bolinによって作成されました(これも強くお勧めします)。
同じMSBuildファイルを使用してこれをラップします。基本的に、アイテムグループで定義していたものは、plovr-config.jsファイルに移動し、呼び出しもはるかに簡単になります。
<Target Name="Build" DependsOnTargets="Init;FindPlovr">
<Exec Command="$(Plovr) build plovr-config.js" />
</Target>
サイズレポートやモジュールグラフなど、plovrでサポートされている他の優れた機能がいくつかありますが、それらがなくても、現在の設定には非常に満足しています。