nvm постоянно "забывает" Node.js в новой сессии терминала
При использовании новой сессии терминала в 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 ответ(ов)
Попробуйте использовать команду nvm alias default
. Например:
$ nvm alias default 0.12.7
Это установит версию Node.js по умолчанию в вашем терминале. Затем проверьте, что изменение сохраняется, закрыв текущее окно терминала и открыв новое, а затем выполните команду:
node --version
Таким образом, вы сможете убедиться, что версия корректно установлена.
Чтобы создать алиас для node
, который будет указывать на текущую версию Node.js, избегая обновления этого алиаса с каждой сменой версии, вы можете использовать следующую команду:
nvm alias default node
Этот способ позволяет вам установить node
как алиас по умолчанию, который будет всегда указывать на последнюю установленную версию Node.js, тем самым минимизируя необходимость в ручном обновлении алиаса при будущих обновлениях.
В моем случае другая программа добавила изменения в 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, но я могу ошибаться.)
Чтобы установить последнюю стабильную версию 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)
Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!
Ни одно из предложенных решений не сработало в моем окружении, nvm
всегда загружает первую установленную версию Node.js, независимо от того, что я делаю (если не сменить ее временно с помощью nvm use
).
Единственный способ изменить версию по умолчанию, который я нашел, заключается в следующем:
- Очистить кэш
nvm
:nvm cache clear
- Установить версию по умолчанию:
nvm alias default 12
(или любую другую версию) - Переключиться на нужную версию:
nvm use 12
- Удалить все остальные версии:
nvm ls
(для отображения установленных версий)nvm uninstall x
(выполнить для каждой версии, которая не является версией по умолчанию)
- Переустановить другие версии:
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
Теперь новые терминалы должны уважать установленную версию по умолчанию.
В чем разница между тильдой (~) и каретом (^) в package.json?
В чем разница между --save и --save-dev?
Как удалить модули npm в Node.js?
Как предотвратить установку "devDependencies" модулей NPM для Node.js (package.json)?
Ошибка "npm WARN package.json: Нет поля repository"