8

nvm постоянно "забывает" Node.js в новой сессии терминала

8

При использовании новой сессии терминала в OS X, nvm забывает версию node и по умолчанию переходит на ничего:

$ nvm ls:

         .nvm
     v0.11.12
     v0.11.13

Мне постоянно нужно вводить nvm use v0.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"  # Это загружает nvm

Есть ли идеи, что я делаю не так?

5 ответ(ов)

16

Попробуйте использовать команду nvm alias default. Например:

$ nvm alias default 0.12.7

Это установит версию Node.js по умолчанию в вашем терминале. Затем проверьте, что изменение сохраняется, закрыв текущее окно терминала и открыв новое, а затем выполните команду:

node --version

Таким образом, вы сможете убедиться, что версия корректно установлена.

2

Чтобы создать алиас для node, который будет указывать на текущую версию Node.js, избегая обновления этого алиаса с каждой сменой версии, вы можете использовать следующую команду:

nvm alias default node

Этот способ позволяет вам установить node как алиас по умолчанию, который будет всегда указывать на последнюю установленную версию Node.js, тем самым минимизируя необходимость в ручном обновлении алиаса при будущих обновлениях.

1

В моем случае другая программа добавила изменения в PATH в файл .bashrc.

Если другая программа внесла изменения в PATH после инициализации nvm, то изменения PATH, внесенные nvm, будут проигнорированы, и в результате у нас будет доступ к системному Node.js в PATH (или вовсе его не будет).

Решение заключалось в том, чтобы переместить настройку nvm в конец файла .bashrc.

### НЕПРАВИЛЬНЫЙ .bashrc ###

# Инициализация NVM
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # Это загружает nvm

# Некоторая другая программа добавляет что-то в PATH:
export PATH="$ANT_ROOT:$PATH"

Решение:

### ПРАВИЛЬНЫЙ .bashrc ###

# Некоторая другая программа добавляет что-то в PATH:
export PATH="$ANT_ROOT:$PATH"

# Инициализация NVM
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # Это загружает nvm

(Тестировалось на bash 4.2.46 в CentOS. Мне кажется, это ошибка в bash, но я могу ошибаться.)

0

Чтобы установить последнюю стабильную версию Node.js, выполните команду:

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)

Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!

0

Ни одно из предложенных решений не сработало в моем окружении, nvm всегда загружает первую установленную версию Node.js, независимо от того, что я делаю (если не сменить ее временно с помощью nvm use).

Единственный способ изменить версию по умолчанию, который я нашел, заключается в следующем:

  1. Очистить кэш nvm: nvm cache clear
  2. Установить версию по умолчанию: nvm alias default 12 (или любую другую версию)
  3. Переключиться на нужную версию: nvm use 12
  4. Удалить все остальные версии:
    • nvm ls (для отображения установленных версий)
    • nvm uninstall x (выполнить для каждой версии, которая не является версией по умолчанию)
  5. Переустановить другие версии: nvm install x

Вы можете использовать следующий скрипт для автоматизации этого процесса (просто измените первую переменную на нужную вам версию) — он автоматически переустановит все версии, которые у вас были ранее:

DEFAULT_NVM_VERSION=16
nvm cache clear
nvm install $DEFAULT_NVM_VERSION
nvm alias default $DEFAULT_NVM_VERSION
NVERS=$(nvm ls --no-alias | grep -v -- "->" | grep -o "v[0-9.]*")
while read ver; do nvm uninstall $ver; done <<< $NVERS
while read ver; do nvm install $ver; done <<< $NVERS
nvm use $DEFAULT_NVM_VERSION

Или, в виде однострочника:

DEFAULT_NVM_VERSION=16 && nvm cache clear && nvm install $DEFAULT_NVM_VERSION && nvm alias default $DEFAULT_NVM_VERSION && NVERS=$(nvm ls --no-alias | grep -v -- "->" | grep -o "v[0-9.]*") && while read ver; do nvm uninstall $ver; done <<< $NVERS && while read ver; do nvm install $ver; done <<< $NVERS && nvm use $DEFAULT_NVM_VERSION

Теперь новые терминалы должны уважать установленную версию по умолчанию.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь