【问题标题】:How can I make npm set the HOME environment variable correctly when running git?运行 git 时如何让 npm 正确设置 HOME 环境变量?
【发布时间】:2017-11-22 22:20:41
【问题描述】:

我在 Windows 中设置了一个 HOME 环境变量以指向文件夹 C:\tom\

当我从命令行运行 git 并调用 ssh 时,它最终会查找 ~/.ssh 文件夹或 $HOME/.ssh,并找到 C:\tom\.ssh。这方面工作正常。

另一方面,当 npm 运行 git 时,就像在尝试获取引用私有 github 存储库的依赖项时一样,ssh 似乎最终会尝试 C:\Users\tom\.ssh,也就是 %USERPROFILE%\.ssh。但是我的PC上不存在那个文件夹,所以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 修改环境,或者其他什么。

【问题讨论】:

  • npm set HOME "C:\tom" -g(全局标志)
  • 谢谢 - 但这并没有解决问题。
  • 我猜这与 here 的逻辑有关 - 它更喜欢 USERPROFILE 而不是 HOME,但由于 USERPROFILE 是强制性的,而 HOME 是可选的,它可能应该反过来。
  • 嗯好吧,它是包含这些 git 命令的打包脚本吗 - 你在命令之前尝试过overriding the environment variables。抱歉,不知道还有什么建议。
  • 没有脚本...只有 package.json 中引用私有 GitHub 存储库的依赖项。我现在所做的是从 C:\Users\tom\.ssh 到 C:\tom.ssh 的连接,这是我可以容忍的。 I've also opened a GitHub issue.

标签: node.js git ssh npm


【解决方案1】:

如您所见,npm 在 Windows 系统上将 $HOME 设置为 $USERPROFILE。

在 Windows 上使用 bash 执行时,使 npm 使用 $HOME 的正确值的一种方法是将 USERPROFILE 设置为 $HOME 的值:

export USERPROFILE=$HOME

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2020-04-06
    • 2020-01-12
    • 2019-10-02
    相关资源
    最近更新 更多