2012-08-27 122 views
16

是否有任何好的教程整合咕嚕與螞蟻?我們目前的版本使用ant,因爲我們是一家Java商店。然而,前端開始成爲頭等公民,我們正在研究使用node和grunt來進行前端構建。我需要將前端構建與ant構建集成。我需要知道如何規範所有我的自定義任務的退出代碼以及內置的grunt任務,並在咕嚕任務被ant調用時將控制檯輸出限制爲這些預定義的代碼。任何幫助將不勝感激。整合咕嚕與螞蟻

回答

2

Grunt可以調用命令行,因此您可以輕鬆地在grunt中創建幾個任務,除了通過shell執行一個ant任務外什麼也不做。

grunt-shell庫使它特別容易從繁重的任務,執行外部命令:https://github.com/sindresorhus/grunt-shell

既然你在談論的自定義退出代碼,不過,你很有可能要結束了寫自己的自定義咕嚕任務執行shell命令,然後查看響應代碼(可能使用grunt.helpers.spawn幫助程序):https://github.com/gruntjs/grunt/blob/master/docs/api_utils.md#gruntutilsspawn

我的建議是?我的organization recently went through the same thing,如果可能的話,最好儘量徹底擺脫螞蟻,徹底擺脫與JavaScript相關的項目。

Grunt有這樣一個越來越有用的插件庫,如果你不能複製你的ant構建文件並創建一個100%javascript解決方案,我會感到驚訝。

+5

我也在Java商店,這是一個很難賣。雖然前端對我們而言也越來越重要,但我們不太可能將JS用作服務器端代碼的構建語言。更現實的方法似乎是通過自定義的ant任務調用grunt。另一方面,我沒有看到有人這樣做,所以... – carbontax

0

您可以使用http://abc.tools.qafoo.com/其中包括NPM模塊* 1)

,那麼你唯一需要的是一個自定義的目標,如:

… 

<target 
    name="-mm:compile:main~hooked" 
    extensionOf="-compile:main~hook" 
    depends=" 
     -my-compile-npm-hook 
    " 
> 

<target 
    name="-my-compile-npm-hook" 
> 
    <echo>install local grunt-cli</echo> 
    <antcall target="npm:install"> 
     <param name="in.npm.package.name" value="grunt-cli" /> 
    </antcall> 
</target> 

… 

之後,你可能會遇到在.npm/node_modules/.bin/目錄別名咕嚕${npm.local.modulesdir}/.bin/ ^^不會錯過包括或src/main/resources/extensions/npm/npm.properties

* 1)定義屬性:unfortunatly buggy與當前的node.js版本

14

您可以使用此宏:

<macrodef name="exec-node"> 
    <attribute name="module" description="The name of the NodeJS module to execute"/> 
    <attribute name="failonerror" default="true" description="Fail if the exit code is not 0"/> 
    <element name="args" implicit="yes" description="Argument to pass to the exec task"/> 
    <sequential> 
     <exec executable="cmd.exe" failonerror="@{failonerror}" osfamily="winnt"> 
      <arg line="/c @{module}" /> 
      <args/> 

      <!-- Windows cmd output workaround: http://stackoverflow.com/a/10359327/227349 --> 
      <!-- Forces node's stderror and stdout to a temporary file --> 
      <arg line=" &gt; _tempfile.out 2&lt;&amp;1"/> 

      <!-- If command exits with an error, then output the temporary file  --> 
      <!-- to stdout delete the temporary file and finally exit with error level 1 --> 
      <!-- so that the apply task can catch the error if @failonerror="true"  --> 
      <arg line=" || (type _tempfile.out &amp; del _tempfile.out &amp; exit /b 1)"/> 

      <!-- Otherwise, just type the temporary file and delete it--> 
      <arg line=" &amp; type _tempfile.out &amp; del _tempfile.out &amp;"/> 
     </exec> 
     <exec executable="@{module}" failonerror="@{failonerror}" osfamily="unix"> 
      <args/> 
     </exec> 
    </sequential> 
</macrodef> 

而且你可以調用任何命令:例如:

<target name="jshint"> 
    <exec-node module="grunt"> 
     <arg value="jshint" /> 
    </exec-node> 
</target> 

的作品就像一個魅力:也保證了標準錯誤還印,這是一種常見調用grunt時出現問題。