2012-10-14 11 views
19

私は非常に単純な事前にコミットスクリプト作成しました: - 私は、コマンドラインでgit commitを実行するとGitのMac用のGitHubに失敗し、プリコミットフック(コマンドライン上で動作します)

#!/usr/bin/env sh 

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

exit 0 

を(失敗したテストで)、私はメッセージTests failed. Aborting..で期待される出口1を得る。

私はMac用のGitHubを使用している場合しかし、しかし、私が手:

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

私はMac用のGitHubが使用しているが、私がしてきたことを実行環境に利用可能ではないnpmへのダウンを推測しています私の髪を引き裂いて、これを解決する方法を見つけようとしています。

答えて

22

解決済み。実行の時点でPATHの両方/usr/local/bin/usr/local/sbinを追加

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

すなわち:グローバルにインストールノードモジュールは/usr/local/binの下に終わるとして、私は単に私の前のコミットの先頭に以下を追加する必要がありました。

1

Github DesktopやSourcetreeなどのGUI環境で使用できる$ PATH変数は、端末で使用可能な変数とは異なります。デフォルトでは、GUI環境で使用可能な$ PATHはノードモジュールを見つけることができません。前の回答で述べたように、あなたは、/ usr/local/binには、私はノードの異なるバージョンを格納Node Version Managerを、使用していますので、これは動作しませんでした私の場合は

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

を追加することにより、パスにあることを確認することができますノードのバージョンをアップグレードして簡単に切り替えることができます。 Nodeの各バージョンのnode_modulesを別々のファイルに格納します。 NVMのため、このチェックは

#!/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 

、それが存在する場合は、それをロードし、ノードの現在使用されたバージョンのノードモジュールへのパスを見つけるためにそれを使用しています。ここに私はこの問題を回避するために使用されるコードです。ノードモジュールにのみアクセスしようとしていて、何か特別なことをする必要がない場合は、sbin folderを追加することはできません。 /usr/local/sbin

+0

"パスに/ usr/local/binがあることを確認できます。 – sompylasar

+0

@sompylasarは、コミット前のスクリプトで、私は例を掲載しました。質問のスクリプトを修正し、それを私の答えに掲載しました。 nvmが使用可能かどうかに基づいてPATHを変更します – RustyToms

関連する問題