我們已經在基於.NET的項目中使用Closure Compiler一段時間了。
最初,我們使用了一個簡單的MSBuild.proj文件,它直接調用Python腳本。例如,我們將使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 [email protected](Extern, ' -f --externs=')</Externs>
</PropertyGroup>
<PropertyGroup Condition="'@(Define)' != ''">
<Defines>-f [email protected](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是非常積極的維護,由Michael Bolin創建,他在字面上撰寫了關於Closure的書(也強烈推薦)。
我們仍然使用相同的MSBuild文件進行包裝。基本上,我們在項目組中定義的東西移動到plovr-config.js文件,並調用變得簡單多了還有:
<Target Name="Build" DependsOnTargets="Init;FindPlovr">
<Exec Command="$(Plovr) build plovr-config.js" />
</Target>
有由plovr支持的其他一些很酷的功能,如大小報告和模塊圖表,但即使沒有這些圖表,我們對目前的設置也非常滿意。
感謝您的詳細解答。我們會試試這個。 – 2011-05-04 20:18:39
如果有人感興趣,我爲閉包編譯器寫了一個快速而髒的MSBuild任務。主要的興趣點是它使用.Net版本的編譯器(使用IKVM),所以它運行在進程中 - https://github.com/unintelligible/ClosureCompilerMsBuild(它也可以選擇提交到託管編譯器,儘管進程中的版本顯然要快得多。) – zcrar70 2011-07-07 14:41:43
我是MSBuild的總noob,但我無法弄清楚如何使你的代碼在那裏與plovr一起工作。我該如何填充$(Plovr)。我嘗試了直接命令行: '但保留當我發佈我的項目時獲得退出代碼1。 –
Ally
2014-03-28 21:07:50