nvm продолжает «забывать» узел в новой терминальной сессии

546

При использовании нового сеанса терминала в 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версия для варки:

#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

Любой ключ к тому, что я делаю неправильно?

frhd
источник
1
Просто хочу добавить это здесь - Убедитесь, что вы экспортируете, .bash_profileа не свой.bashrc
James111

Ответы:

1181

Попробуй nvm alias default. Например:

$ nvm alias default 0.12.7

Это устанавливает версию узла по умолчанию в вашей оболочке. Затем убедитесь, что изменение сохраняется, закрыв окно оболочки, открыв новое, а затем: node --version

dylants
источник
11
Разве это не работа nvm? После $ nvm alias default 0.11.13и $ nvm use 0.11.12я получаю node --version = 0.11.12. Тем не менее, в новом сеансе узел снова исчез. В Debian у меня вообще нет этой проблемы.
14:04
4
Хорошо, у меня была опечатка nvm alias defaul X. При правильном использовании это на самом деле работает. Так что рабочий процесс будет nvm install Xтогда nvm alias default X, я думаю. Спасибо за помощь!
frhd
21
У меня была та же самая проблема, и это было, потому что я экспортировал NVM_DIRпосле nvm.sh. Убедитесь, что экспортировали NVM_DIRранее.
maxwell2022
11
Обратите внимание, что nvm alias defaultне устанавливает версию узла для текущей среды, только для всех новых.
ericsoco
28
Если это не сработает, убедитесь, что у вас .bash_profile(или .bashrcчто-то еще) ничего не PATHsource xx/nvm.sh
изменилось
85

Псевдоним для nodeсебя, чтобы избежать обновления псевдонима по умолчанию, а также обновления версии узла в дальнейшем.

nvm alias default node
Tarun
источник
2
! ВНИМАНИЕ: Версия 'узел' не существует. по умолчанию -> узел (-> Н / Д)?
House3272
6
Как насчет node alias default stable?
Пьер Генри
1
Я не думаю, что вы хотите использовать stableбольше. Из документации nvm: «стабильный: этот псевдоним устарел, и действительно относится только к узлу v0.12 и более ранним версиям. В настоящее время это псевдоним для узла».
Феррис
1
На что nodeэто по умолчанию? Node, установленный и используемый NVM в текущей оболочке, или Node, возможно, установленный в системе с помощью установочного пакета Node или Homebrew и т. Д.?
2540625
7
(сопровождающий nvm здесь) nodestable, но все в выпущенном в semver стабильно, так что теперь это бесполезное слово) использует последнюю доступную версию. Для локальных команд последние установлены; для удаленных команд, последние доступны.
LJHarb
40

Чтобы установить последнюю стабильную версию:

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)
ohho
источник
Это отлично работает, и предложение использовать nvm listпомогает пользователям визуализировать, что происходит с их версиями. Спасибо!
Solvitieg
30

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

Если бы другая программа изменила PATH после инициализации nvm, то PATHизменения nvm будут забыты, и мы получим системный узел на нашем PATH(или нет узла).

Решение было перенести настройки NVM в нижней части.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"

Решение:

### GOOD .bashrc ###

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

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

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

joeytwiddle
источник
1
Это помогло мне! По умолчанию застрял.
Редсандро
1
Дайте этому парню медаль! У меня была дополнительная загрузка других * rc файлов в мой zshrc после экспорта NVM_DIR, это сводило меня с ума. Спасибо!
bobbytables
Спасибо! Это сводило меня с ума.
деревья
27

nvm выполняет свою работу, изменяя переменную PATH, поэтому вам нужно убедиться, что вы не каким-то образом изменили свой PATH на что-то другое после использования сценария nvm.sh.

В моем случае nvm.sh вызывался в .bashrc, но затем переменная PATH обновлялась в .bash_profile, в результате чего мой сеанс находил системный узел перед узлом nvm.

Джефф Микелс
источник
1
как я могу это проверить? Я подозреваю, что это так.
Мягкий пух
это был мой случай, спасибо! Я установил экспорт поверх моего файла .zshrc, просто переместил его в конец, и проблема была решена
Алехандро Сильва
Это был мой случай. Решением было переместить запись NVM ~ / .bash_profile в конец файла + set nvm alias defaultи nvm useв нужную мне версию.
Евгений Тартаковский
Это было решением для меня. Перемещено следующее .bashrc: export NVM_DIR="$HOME/.nvm"затем. "/usr/local/opt/nvm/nvm.sh"
asmiller
10

Решения с самым высоким рейтингом, похоже, не работают для меня. Мое решение ниже:

  1. Удалите nvm полностью, используя homebrew:brew uninstall nvm
  2. Переустановка brew install nvm
  3. В терминале выполните следующие действия (они также перечислены при установке nvm через homebrew):

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

Описанные выше шаги добавят рабочий каталог NVM в ваш путь $ HOME, скопируют nvm-exec в рабочий каталог NVM и добавят в $ HOME / .bashrc, $ HOME / .zshrc или эквивалентный файл конфигурации вашей оболочки. (Опять же взято из whats перечислены при установке NVM с использованием homebrew)

Джо
источник
7

Если вы все перепробовали, не повезло, вы можете попробовать это: _

1 -> удалить NVM

rm -rf ~/.nvm

2 -> Удалить зависимости npm, следуя этому

3 -> Установить 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это будет версия узла по умолчанию или вы можете установить любую версию узла

Gabbar
источник
1
Большое спасибо! Это было единственное решение, которое также устанавливает путь к узлу в bash и работает для меня. Я просто использовал «nvm install node» для установки последней версии узла, а не «nvm install v7.8.0»
user3492435
5

Этот вопрос упоминается для 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

ссылка на описательное решение

Супарно Маюмдер
источник
1
Просто обратите внимание, это зависит от включения vв версию при настройке пульта. Например, v4.2.4вместо 4.2.4.
Вон
4

Doing nvm install 10.14, к примеру, nvm useчто версия для текущего сеанса оболочки , но это не всегда установить его в качестве значения по умолчанию для будущих сессий , как можно было бы ожидать. Версия узла, которую вы получаете в новом сеансе оболочки, определяется nvm alias default. Смущает, nvm installбудет устанавливать псевдоним по умолчанию, только если он еще не установлен. Чтобы получить ожидаемое поведение, сделайте это:

nvm alias default ''; nvm install 10.14

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

Денис Хоу
источник
3

запустите это после того, как вы установили любую версию,

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

Эта команда копирует любую версию активного узла через nvm в каталог / usr / local / и устанавливает разрешения, чтобы все пользователи могли получить к ним доступ.

Муафа Ахмед
источник
Я бы рекомендовал использовать &&s вместо ;s в этой команде. Если whichне удается найти узел, мы не хотим переходить к chmod /bin/*!
Joeytwiddle
3

Я нашел новый способ здесь. Использование n интерактивного управления Node.js помогает.

Харшит Гарг
источник
Да! Не уверен, что это потому, что я использую fishоболочку, но принятый ответ мне не помог. nработает удовольствие!
Clozach
2

Я использую ZSH, поэтому мне пришлось изменить ~/.zshrcстроки, касающиеся NVM, в следующем порядке:

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh
Мэтт Вальтерспилер
источник
1
$ nvm alias default {NODE_VERSION}

когда мы используем вышеупомянутую команду, только обновляем версию узла, но npmвсе еще использует старую версию.

Вот еще одно решение для обновления обоих, nodeи npmв моем случае я хочу использовать узел, 8.9.4и я использовал команду ниже.

$ nvm use default 8.9.4

И команда возвращает результат.

Теперь с помощью узла v8.9.4 (npm v5.6.0)

Аниш Агарвал
источник
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
itsDrew
источник
0

Я столкнулся с той же проблемой при использовании встроенного терминала в VS Code Editor. Перезапуск VS Code после изменения версии узла с помощью nvm устранил проблему для меня.

RS1879
источник
0

Вот простая инструкция:

1) Установите:

nvm install 8.10.0

2) Используйте один раз на терминал

nvm use 8.10.0

3) Установить по умолчанию для всех терминалов

nvm alias default 8.10.0

Возможно, вам придется использовать права root для выполнения этих действий.

И не забудьте проверить документацию nvm для получения дополнительной информации.

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

Арсений-II
источник
-2

Также в случае, если перед установкой nvm вы установили узел в ~ / .bash_profile, чтобы не было что-то вроде:

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

Если он у вас есть, прокомментируйте / удалите его, и nvm должен начать обрабатывать версию узла по умолчанию.

tibbus
источник
Установка переменной пути не имеет ничего общего с выбором версии nvm, не так ли?
sn0r
nvm.sh должен изменить ваш PATH после его установки (например, с помощью вышеупомянутого). Это позволило NVM поместить свою версию каталога , прежде чем / USR / местные / бен где «система» версию узла жизни.
Денис Хоу
-3

После долгого конфликта с этой проблемой, я нашел, как это исправить. Вот пошаговое решение проблемы:

  • Откройте терминал и установите инструменты разработчика командной строки:

    xcode-select --install

  • Нажмите Ввод

  • Установите последнюю версию NVM:

    cd ~/

  • Нажмите Ввод

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

  • Нажмите Ввод
  • Если вы уже создали папку .nvm, вы увидите следующее сообщение об ошибке:

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

    Иначе, вы увидите процесс клонирования, пока он не завершится.

  • Проверьте последнюю версию NVM:

    cd ~/.nvm

  • Нажмите Ввод

    git checkout v0.34.0

    Вы получите ответ, похожий на:

    HEAD is now at 3d9c31d v0.34.0

    Версия может отличаться в разных системах.

    ls

  • Нажмите Ввод

    . nvm.sh

  • Нажмите Ввод

    nvm list

  • Нажмите Ввод

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

    nvm ls-remote | tail -n9

  • Нажмите Ввод

    nvm list

  • Откройте bash с помощью vim:

    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чтобы сохранить файл.
  • Нажмите Ввод

    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, установленные в вашей системе.

Иден Шарвит
источник