2012-10-14 33 views
19

我創建了一個非常簡單的預提交腳本: -Git的pre-commit鉤子在GitHub上沒有爲Mac(適用於命令行)

#!/usr/bin/env sh 

# Run tests 
npm test 
if [ $? -ne 0 ]; then 
    echo "Tests failed. Aborting.." 
    exit 1 
fi 

exit 0 

當我在命令行中運行git commit (未通過測試),我得到預期的出口1,並帶有消息Tests failed. Aborting..

不過,如果我使用GitHub上的Mac,但是我得到:

.git/hooks/pre-commit: line 5: npm: command not found 
Tests failed. Aborting.. 
(256) 

我猜其打倒在不被提供到GitHub上爲Mac使用的執行環境npm,但我一直把我的頭髮撕掉試圖找出如何解決這個問題。

回答

22

已解決。作爲全球安裝節點模塊/usr/local/bin下結束了我只是需要添加以下在我的預提交開頭:

PATH=$PATH:/usr/local/bin:/usr/local/sbin 

即在執行點追加兩個/usr/local/bin/usr/local/sbinPATH

1

GUI環境(如Github Desktop和Sourcetree)中可用的$ PATH變量與終端中可用的$ PATH變量不同。默認情況下,GUI環境中可用的$ PATH無法找到您的節點模塊。正如在前面的回答指出,可以確保在/ usr/local/bin目錄是在路徑中加入

PATH=$PATH:/usr/local/bin:/usr/local/sbin 

在我來說,這並沒有工作,因爲我使用Node Version Manager,存儲不同版本的節點並且可以輕鬆升級和切換節點版本。它將每個版本的Node的node_modules存儲在一個單獨的文件中。下面是我用來解決這個問題的代碼:

#!/usr/bin/env bash 

PATH="/usr/local/bin:$PATH" 

if [ -f $HOME/.nvm/nvm.sh ] 
then 
    . $HOME/.nvm/nvm.sh 
    PATH="$HOME/.nvm/versions/node/$(nvm current)/bin:$PATH" 
fi 

此檢查NVM,如果它存在,它加載並使用它來尋找路徑爲節點的當前使用的版本的節點模塊。如果您只嘗試訪問節點模塊並且不需要特別注意,可以跳過sbin folder(例如, /usr/local/sbin

+0

「您可以通過添加」 - 通過添加位置來確保/ usr/local/bin位於路徑中? – sompylasar

+0

@sompylasar在pre-commit腳本中,我發佈了這個例子。我修改了問題中的腳本,並將其發佈在我的答案中。它根據nvm是否可用來修改PATH – RustyToms

相關問題