nvm在新的终端会话中保持“遗忘”节点

时间:2014-07-05 10:05:26

标签: node.js macos npm homebrew nvm

在OS X中使用新的终端会话时,nvm会忘记节点版本并默认为空:

$ nvm ls

         .nvm
     v0.11.12
     v0.11.13

我必须在每个会话中继续点击nvm use v.0.11.13

         .nvm
     v0.11.12
->   v0.11.13

我已经尝试了brew安装以及官方安装脚本。

我的 .profile 为brew版本:

#nvm
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

对于install.sh脚本:

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.10.0/install.sh | bash

#nvm
export NVM_DIR="/Users/farhad/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

我做错了什么的任何线索?

21 个答案:

答案 0 :(得分:1039)

试试nvm alias default。例如:

$ nvm alias default 0.12.7

这将在shell中设置默认节点版本。然后通过关闭shell窗口,打开一个新窗口,验证更改是否仍然存在,然后: node --version

答案 1 :(得分:73)

别名为node本身,以避免更新默认别名以及稍后的节点版本更新。

nvm alias default node

答案 2 :(得分:35)

安装最新的稳定版本:

nvm install stable

要将默认设置为稳定版本(而不是特定版本):

nvm alias default stable

列出已安装的版本:

nvm list

v6.2.0开始,它看起来像是:

$ nvm list
         v4.4.2
->       v6.2.0
default -> stable (-> v6.2.0)
node -> stable (-> v6.2.0) (default)
stable -> 6.2 (-> v6.2.0) (default)
iojs -> N/A (default)

答案 3 :(得分:22)

nvm通过更改PATH变量来完成它的工作,因此您需要确保在获取nvm.sh脚本之后不会以某种方式将PATH更改为其他内容。

在我的情况下,在.bashrc中调用了nvm.sh,但随后在.bash_profile中更新了PATH变量,导致我的会话在nvm节点之前找到了系统节点。

答案 4 :(得分:18)

就我而言,另一个程序已将PATH更改添加到.bashrc

如果其他程序在 nvm初始化之后更改了PATH ,那么nvm的PATH更改将被遗忘,我们将获取{{1}上的系统节点(或没有节点)。

解决方法是将nvm设置移至PATH 底部

.bashrc

解决方案:

### BAD .bashrc ###

# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

(这是在CentOS上使用bash 4.2.46。在我看来,这似乎是bash中的一个错误,但我可能会弄错。)

答案 5 :(得分:8)

评价最高的解决方案对我来说似乎不起作用。我的解决方案如下:

  1. 使用自制程序完全卸载nvm:brew uninstall nvm
  2. 重新安装brew install nvm
  3. 在终端中,按照步骤操作 下面(这些也是在通过自制软件安装nvm时列出的):

    mkdir ~/.nvm cp $(brew --prefix nvm)/nvm-exec ~/.nvm/ export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh

  4. 上面列出的步骤会将NVM的工作目录添加到$ HOME路径,将nvm-exec复制到NVM的工作目录并添加到$ HOME / .bashrc,$ HOME / .zshrc,或者你的shell的等效配置文件。(再次从使用自制软件的NVM安装中列出的内容中获取)

答案 6 :(得分:6)

如果您尝试了所有方法后仍然不走运,可以尝试一下:_

1->卸载NVM

rm -rf ~/.nvm

2->通过遵循this

删除npm依赖项

3-> Install NVM

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

4->设置~/.bash_profile配置

运行sudo nano ~/.bash_profile

复制并粘贴以下内容

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

5-> CONTROL + X保存更改

6->运行. ~/.bash_profile

7->现在,您应该在计算机上安装nvm,要运行运行nvm install v7.8.0的节点,这将是默认的节点版本,或者您可以安装任何版本的节点

答案 7 :(得分:4)

这个问题已经提到了OSX,但它发生在我的Linux操作系统中。 我尝试使用nvm alias default <version>但是对于每个新的终端会话,忘记了使用的节点版本。 所以,这是我想出的解决方案。

确保为节点版本设置默认别名,将以下代码放在.bashrc和source .bashrc中。

export NVM_DIR="/home/bonnie/.nvm"
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
    ## Source it
    source "$NVM_DIR/nvm.sh"
fi
NODE_DEFAULT_VERSION=$(<"$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$NODE_DEFAULT_VERSION/bin":$PATH

descriptive solution link

答案 8 :(得分:2)

在安装任何版本

后运行此命令
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local

此命令将通过nvm激活的任何版本的节点复制到/ usr / local /目录并设置权限,以便所有用户都可以访问它们。

答案 9 :(得分:2)

我在这里找到了一条新路。使用n Interactively Manage Your Node.js 会有所帮助。

答案 10 :(得分:2)

例如,nvm install 10.14nvm use用于当前Shell会话的该版本,但总是将其设置为以后会话的默认版本。您在新的Shell会话中获得的节点版本由nvm alias default确定。令人困惑的是,nvm install仅会设置默认别名(如果尚未设置)。要获得预期的行为,请执行以下操作:

nvm alias default ''; nvm install 10.14

这将确保下载该版本,并将其用于当前会话 ,并将其设置为以后会话的默认版本。

答案 11 :(得分:1)

在VS Code编辑器中使用集成终端时,我遇到了同样的问题。使用nvm更改节点版本后重新启动VS Code对我来说解决了这个问题。

答案 12 :(得分:1)

这是一条简单的指令:

1)安装:

nvm use 8.10.0

2)每个终端只能使用一次

nvm alias default 8.10.0

3)设置所有终端的默认设置

sqlplus Username/Password@SSD << EOF
set colsep ,
set pagesize 0
set trimspool on
set linesize 32768
set echo off
spool $TABLE.csv;
SELECT * FROM $TABLE;
spool off;
EXIT;
EOF 

您可能需要使用root权限才能执行这些操作。

别忘了检查nvm documentation以获得更多信息。

还要注意,您可能需要为IDE指定节点版本: enter image description here

答案 13 :(得分:0)

如果您还有SDKMAN ...

SDKMAN某种程度上与我的NVM冲突。如果您不知所措,但仍然无法解决,我只是通过忽略SDKMAN的“此内容必须位于文件末尾...”并在其后放置NVM行来解决此问题。

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/myname/.sdkman"
[[ -s "/Users/myname/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/myname/.sdkman/bin/sdkman-init.sh"

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

答案 14 :(得分:0)

在与这个问题长期冲突之后,我找到了解决方法。 这是该问题的分步解决方案:

  • 打开终端并安装命令行开发人员工具:

    xcode-select --install

  • 按Enter

  • 安装最新版本的NVM:

    cd ~/

  • 按Enter

    git clone https://github.com/creationix/nvm.git .nvm

  • 按Enter
  • 如果您之前已经创建过.nvm文件夹,则会看到下一条错误消息:

    fatal: destination path '.nvm' already exists and is not an empty directory.

    否则,您将看到克隆过程正在运行,直到完成为止。

  • 查看最新的NVM版本:

    cd ~/.nvm

  • 按Enter

    git checkout v0.34.0

    您将收到类似的回复:

    HEAD is now at 3d9c31d v0.34.0

    在不同的系统上版本可能会有所不同。

    ls

  • 按Enter

    . nvm.sh

  • 按Enter

    nvm list

  • 按Enter

    您会看到计算机上安装了不同的节点版本,可能会有一些错误,请不要引起他们的注意。

    nvm ls-remote | tail -n9

  • 按Enter

    nvm list

  • 使用vim打开bash:

    vim ~/.bash_profile

  • 在vim编辑器中按: i 以输入 INSERT mode 并开始新的一行。如果编辑时有任何错误,请按 ESC 键,然后按 :q! 退出而不保存。

    export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

  • 完成文件编辑后,按 ESC 键(您将看到INSERT模式消失)。

  • :wq 保存文件。
  • 按Enter

    nvm ls-remote | tail -n9

  • 按Enter键并安装显示的最新nvm版本:

    nvm install 12.6.0

  • 该过程完成后,您会看到: Now using node v12.6.0 (npm v6.9.0)

  • 您可以按以下命令检查安装是否成功:

    node -v npm -v ,它应该显示系统上安装的nvm和npm的版本。

    < / li>

基于: How to Install Latest Node Version Manager NVM and Install Node and NPM in macOS Mac OS X

答案 15 :(得分:0)

    volumeMounts:
        - name: storage
          mountPath: /data/elk
        - name: config-volume
          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
          subPath: elasticsearch.yml

  volumes:
  - name: config-volume
    configMap:
      name: elasticsearch-config
  - name: storage
    <add-whatever-volume-you-are-using-for-data>

使用上述命令时,仅更新节点版本,而$ nvm alias default {NODE_VERSION} 仍使用旧版本。

这是更新npmnode的另一种解决方案,在我的情况下,我想使用节点npm,并且使用了以下命令。

8.9.4

该命令返回输出。

  

现在使用节点v8.9.4(npm v5.6.0)

答案 16 :(得分:0)

我正在使用ZSH,所以我不得不按与NVM有关的行的顺序修改~/.zshrc

export PATH="/Users/USERNAME/google-cloud-sdk/bin:$PATH"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh

答案 17 :(得分:0)

在 Ubuntu 上,如果您运行的是非交互式 shell,例如从 cronjob、init 或 upstart 脚本运行,则存在潜在问题。

Ubuntu 的默认 .bashrc 在顶部有这个保护,如果 shell 是非交互式的,它会提前退出:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

因此,为了为非交互式脚本加载 NVM,您可以编辑 ~/.bashrc 并将 NVM 的 init 移动到文件顶部,就在守卫上方。

更安全的是复制 NVM init 使其出现两次。当其他行在 NVM 之后修改 PATH 时,这将解决其他答案中提到的问题。 NVM 似乎并不介意运行两次,尽管它确实会稍微减慢 shell 启动速度。

答案 18 :(得分:0)

在来自 github 的 nvm 自动加载脚本中,我不得不修改

local node_version="$(nvm version)"local node_version="$(node -v)"

我的系统在我的路径中本地安装了 nvm,所以 nvm version 一直说 system 无论如何

答案 19 :(得分:0)

export NVM_DIR="$HOME/.nvm"
  [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

# place this after nvm initialization!
autoload -U add-zsh-hook

load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

答案 20 :(得分:-2)

如果您在 nvm 之前安装了节点,请检查〜/ .bash_profile 中的内容,使其不具备以下内容:

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

如果你有,请评论/删除它, nvm 应该开始处理默认节点版本。