【问题标题】:When using tmux nvm isn't being sourced当使用 tmux nvm 时没有被采购
【发布时间】:2017-11-22 19:37:16
【问题描述】:

我使用 brew 在 macOS 上安装 nvm,然后我使用 nvm 安装 node 8.9.1,它工作正常,直到我加载 tmux,然后我收到以下消息:

nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.1 --silent` to unset it.

经过一些故障排除后,我注意到当我使用 tmux 时,它使用的是不同的 npm。

不使用 tmux:

~ which npm
/Users/mario/.nvm/versions/node/v8.9.1/bin/npm
~ npm config get prefix
/Users/mario/.nvm/versions/node/v8.9.1
~ echo $NVM_DIR
/Users/mario/.nvm

使用 tmux:

~ which npm
/usr/local/bin/npm
~ npm config get prefix
/usr/local
~ echo $NVM_DIR
/Users/mario/.nvm

根据 brew 中的安装说明,我将以下内容添加到我的 .zshrc

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

此外,如果我在 tmux 中手动获取 /usr/local/opt/nvm/nvm.sh ,它会按预期工作。

使用 tmux:

~ which npm
/usr/local/bin/npm
~ . /usr/local/opt/nvm/nvm.sh
~ which npm                       
/Users/mario/.nvm/versions/node/v8.9.1/bin/npm
~ npm config get prefix
/Users/mario/.nvm/versions/node/v8.9.1

任何人都可以提供有关可能导致此问题的原因的任何见解吗?我很乐意根据需要提供更多信息。

版本:

  • macOS 10.13.1
  • zsh 5.4.2
  • tmux 2.6
  • nvm 0.33.6
  • 节点 8.9.1
  • npm 5.5.1

【问题讨论】:

  • 在使用 nvm 之前,您是否使用其他方法(例如 brew)安装了 Node.js?另外,您确定您的.zshrc 是由 tmux 采购的吗?也许在 tmux 内部和外部检查您的 PATH 。发布您的~/.tmux.conf 也可能会有所帮助
  • @FissureKing 我确定正在获取 .zshrc,但我认为您可能是正确的关于正在安装的另一个节点。我正在使用 Brewfile 并且两个包似乎具有必需的节点并且可能导致冲突。发表您的评论作为答案,如果清理 brew 安装的节点依赖项可以解决问题,我很乐意将您的答案标记为正确。
  • 当然,我会写下来。然而,虽然删除有问题的包可能会产生正确的结果,即 npm config get prefix 工作,但它并没有解释 为什么 tmux 和正常的 shell 访问会为 which npm 提供不同的结果。我怀疑这可能是由于path_helper 在您的 PATH 中添加了默认值。见superuser.com/questions/544989/does-tmux-sort-the-path-variable

标签: node.js macos homebrew zsh tmux


【解决方案1】:

除了nvm 之外,您还安装了一个 Node 自制程序包。 nvm 正确地添加了您的 PATH 以解析 Node 和 npm 的正确版本,因此您的工作结果:

~ which npm
/Users/mario/.nvm/versions/node/v8.9.1/bin/npm
~ npm config get prefix
/Users/mario/.nvm/versions/node/v8.9.1
~ echo $NVM_DIR
/Users/mario/.nvm

但是,tmux 会导致您的 PATH 被修改,以便解决不需要的非 nvm 版本。 path_helper is the likely culprit here.

您可以删除有问题的自制程序包,或者通过禁用或调整 path_helper 的结果来确保解决了正确的版本。

前一种解决方案可能会打开另一罐蠕虫,因为您已经指出它是通过 brewfile 安装的,所以让我们看看后者。

One potential solution is to manually unset your PATH before path_helper runs。另一种解决方案可能是修改/etc/paths 以删除/usr/local/bin

【讨论】:

  • 最终,我从brew中卸载了这两个包(heroku和y​​arn)和node,以及node/nvm/npm的所有痕迹。然后我在 brew 中重新安装了 nvm,现在一切似乎都按预期工作(tmux 中没有警告)。由于这些包依赖于节点,我认为通过 npm 安装它们更容易。
【解决方案2】:

您应该在您的NVM_DIR 下使用您的nvm.sh

以下是我在.zshrc中的nvm相关配置

export NVM_DIR=~/.nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
nvm use default

如果由于nvm初始化,每次打开新的Tmux都感觉,可以使用这个lazynvm technic

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 2015-05-12
    • 2022-01-14
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多