2014-01-28 43 views
6

有沒有辦法將命令參數傳遞給Cordova-CLI掛鉤腳本?具體而言,我想爲一些客戶端申請一個應用程序,並且我希望在構建之前通過傳入一個ID號或其他內容來複制它們的特定設置。將參數添加到Cordova-CLI掛鉤腳本?

回答

5

您可以通過環境變量訪問傳遞給cordova鉤子的參數。您可以設置一個環境變量,該變量將保持當前會話的「活動狀態」。

例如,如果我們有一個叫做 '目標' 變量:

的Windows CMD:

SET TARGET=someValue 
cordova build android 

PowerShell的:

$env:TARGET = "someValue" 
iex "cordova build android" 

然後,您可以訪問您的掛鉤這些環境變量使用以下語法(假設您正在使用node.js編寫鉤子):

var target = "someDefaultValue"; 

// Check for existence of the environment variable 
if (process.env.TARGET) { 

    // Log the value to the console 
    console.log('process.env.TARGET is set to: ' + process.env.TARGET); 

    // Override the default 
    target = process.env.TARGET; 
} 

// Log the set value 
console.log('Target is set to: ' + target); 
+2

這是一個非常難以維護的解決方案 - 更好地將它組合成另一個命令的選項,然後該命令將調用cordova構建過程,如Gulp或Grunt。 – Hgehlhausen

+0

如果在Mac終端上該怎麼辦? – Yawar

0

是的,通過查看CORDOVA_CMDLINE環境變量,可以看到傳遞給Cordova的完整命令行。你應該看到它設置爲這樣的事情:

node /usr/local/bin/cordova build ios your_extra_parameters_can_go_here 

看來,科爾多瓦忽略不承認(避免與破折號開始自己參數),這樣你就可以添加後自己的自定義值的任何參數平臺參數。

請記住,此功能是最近添加的(版本3.3.0)。所以如果這個變量沒有爲你設置,請嘗試升級你的Cordova。

+0

引發此構建錯誤,如果您從其他腳本如grunt運行它,則會顯示爲失敗的構建。 平臺/ IOS /科爾多瓦/建造--qa 無法識別的標誌:--qa 錯誤:/Users/tom.hicks/Projects/CloudCast/client/platforms/ios/cordova/build:命令失敗,退出代碼2 在ChildProcess.whenDone(/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:131:23) 在ChildProcess.emit(events.js:98:17) 在可能關閉(child_process.js:755:16) at Process.ChildProcess._handle.onexit(child_process.js:822:5) – majinnaibu

+0

是的,我發現在最近的更新後這不再起作用。 Cordova一直在改變它如何處理命令行參數以及構建腳本的環境。 – andypaxo

+0

我們一直忽略cordova build命令。所以我們的過程是在/ www中運行cordova編輯站點,然後在/ platforms/ios中打開/構建xcode項目。現在我只是保持xcode打開並運行cordova prepare --qa進行更改後,我在xcode中打開以開始調試。 – majinnaibu

1

查看使用科爾多瓦命令並通過你自己的命令集EG的:科爾多瓦運行的Android -e env_value

在你的鉤子,你可以通過使用CORDOVA_CMDLINE

查找通過-e命令

在下面的bash腳本,我能夠通過命令中的每個字做一個循環傳遞

#!/bin/sh 
(
command=${CORDOVA_CMDLINE} 
for word in $command 
    do 
    if [ "$flag" = "true" ] 
     then 
      echo "Flag is true Word printed is: '$word'" 
     fi 
    if [ "$word" = "-e" ] 
    then 
     echo $flag 
     flag="true" 
    else 
     echo $word 
     flag="false" 
    fi 
done 

回聲上面的例子:科爾多瓦運行IOS -e「刺」

cordova 

run 

android 

-e 

Flag is true word printed is: prod 
+0

將hook腳本添加到config.xml中 Edson