我在Windows中设置了HOME
环境变量,指向文件夹C:\tom\
。
当我从命令行运行git并调用ssh时,它最终会查找~/.ssh
文件夹或$HOME/.ssh
,并找到C:\tom\.ssh
。这方面的工作正常。
当npm运行git时,另一方面,当尝试获取引用私有github repo的依赖时,ssh似乎最终尝试C:\Users\tom\.ssh
,即%USERPROFILE%\.ssh
。但是我的电脑上没有该文件夹,所以ssh失败了,因为它无法找到github的known_hosts
条目,最终git失败了:
npm ERR! Command failed: git -c core.longpaths=true fetch -a origin
npm ERR! Host key verification failed.
npm ERR! fatal: Could not read from remote repository.
npm config list
产生以下内容:
; cli configs
user-agent = "npm/3.10.8 node/v6.9.1 win32 x64"
; builtin config undefined
prefix = "C:\\Users\\tom\\AppData\\Roaming\\npm"
; node bin location = C:\Program Files (x86)\nodejs\node.exe
; cwd = C:\
; HOME = C:\Users\tom
; "npm config ls -l" to show all defaults.
所以这是有道理的,并且可能是npm的HOME设置在运行git时在环境中出现。所以我尝试npm config set HOME C:\tom
,希望这会解决问题...但它没有任何区别。
如何解决这个问题?我希望ssh始终能找到C:\tom\.ssh
。我不希望它找到C:\Users\tom\.ssh
。我怎么能做到这一点?我不介意我是否必须通过调整某些设置来实现这一点,如果有一些选项可以阻止npm修改环境,或者别的什么。
答案 0 :(得分:0)
如您所见,npm 在 Windows 系统上将 $HOME 设置为 $USERPROFILE。
在 Windows 上使用 bash 执行时,让 npm 使用正确的 $HOME 值的一种方法是将 USERPROFILE 设置为 $HOME 的值:
export USERPROFILE=$HOME