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 для пивной версии:

#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

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


person frhd    schedule 05.07.2014    source источник
comment
Просто хочу добавить это сюда - убедитесь, что вы экспортируете из .bash_profile, а не из своего .bashrc   -  person James111    schedule 08.06.2016
comment
какая разница между .bash_profile и .bashrc в Mac OS?   -  person vikramvi    schedule 24.05.2021


Ответы (20)


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

$ nvm alias default 0.12.7

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

person dylants    schedule 05.07.2014
comment
У меня не работало, и у меня не было проблем, по словам Максвелла. Я не использовал brew, но я обновил / переустановил свой nvm и это исправило. - person Jonah; 27.05.2016
comment
Моя версия nvm (1.1.0) не распознает параметр псевдонима - person Kelly S. French; 02.06.2016
comment
Кроме того, в зависимости от того, где в вашем профиле загружен сценарий инициализации nvm, возможно, что новая оболочка не загрузит ожидаемую версию, даже с правильным псевдонимом по умолчанию. - person Evan Mattson; 31.08.2016
comment
Если это не сработает, убедитесь, что в вашем .bash_profile (или .bashrc или что-то еще) у вас нет ничего, изменяющего PATH после source xx/nvm.sh - person goodmanship; 10.01.2017
comment
@ KellyS.French (здесь сопровождающий nvm) nvm еще не достиг версии 1.0 - возможно, вы установили ее из npm. Устанавливайте только с помощью скрипта curl с nvm.sh, и вы получите нужную версию. - person LJHarb; 05.04.2017
comment
@LJHarb Я попробую. Это заставляет меня задуматься, как моя среда переводила мою команду nvm. Я установил nvm, загрузив двоичный файл Windows, так что есть ли эквивалент .bat или .ps1 сценария curl, который вы упомянули? - person Kelly S. French; 05.04.2017
comment
@ KellyS.Французский ах! nvm не поддерживает окна (кроме BashOnWindows) - у вас может быть nvm-windows, это другой проект. - person LJHarb; 06.04.2017
comment
вы также можете указать версию lts в более поздней версии nvm. например: nvm alias default lts/boron - person XoXo; 19.11.2017
comment
Я не могу заставить это работать с образом Amazon linux. Я пробовал описанное выше и определение использования и т. Д. Мне нужно вручную запускать: nvm use 8.8.1 каждый раз. это боль. NVM слишком сломан. Я просто вручную устанавливаю node. Так нет проблем. - person Jeremy; 11.12.2017
comment
На самом деле мне пришлось удалить версию, которая использовалась по умолчанию, поскольку больше ничего не вышло. $ nvm uninstall 6.11.3 а потом я перешел на 6.11.5 ... - person YannickHelmut; 19.06.2018
comment
Очень запутанное поведение. Первая установка nvm X устанавливает для вашего псевдонима nvm по умолчанию значение X, которое вы получите в новой оболочке, пока не выполните другое использование nvm или nvm install. Даже если вы используете nvm use или nvm install, это не приведет к обновлению псевдонима nvm, поэтому вы застрянете с первой версией по умолчанию, если вы сами не обновите псевдоним. - person Denis Howe; 18.01.2019
comment
Этот ответ работал у меня в подсистеме Windows для Linux (WSL) с Ubuntu 18.04. - person Carsten Führmann; 28.10.2019
comment
ffs, это был такой простой ответ, это меня какое-то время беспокоило, и я подумал, что это будет какая-то неприятная вещь, которую нужно исправить, спасибо. - person WakeskaterX; 22.05.2020
comment
Вместо привязки узла к версии вы можете указать 'lts/*' в качестве идентификатора версии, чтобы использовать последнюю версию LTS. - person Trent; 21.07.2020
comment
Это работает отлично, но почему использование перестало работать? - person Ahmed Mahmoud; 15.03.2021

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

nvm alias default node
person Tarun    schedule 06.08.2015
comment
На самом деле это лучше, чем псевдоним определенной версии (другой ответ). Этот подход также предлагается в github.com/creationix/nvm#install-script. . - person Tom; 30.12.2015
comment
потрясающе спасибо! - person anon58192932; 18.06.2021

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

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)
person ohho    schedule 01.06.2016
comment
Это отлично сработало, и предложение использовать nvm list помогает пользователям визуализировать, что происходит с их версией. Спасибо! - person png; 16.03.2019

В моем случае другая программа внесла 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, но я могу ошибаться.)

person joeytwiddle    schedule 19.12.2017
comment
Это мне помогло! По умолчанию застрял. - person Redsandro; 06.09.2018
comment
Дайте этому парню медаль! У меня была дополнительная загрузка других файлов * rc в моем zshrc после экспорта NVM_DIR, это сводило меня с ума. Спасибо! - person bobbytables; 20.09.2018
comment
Спасибо! Это сводило меня с ума. - person Trees; 03.06.2020
comment
Пожалуйста, поясните, почему вы не использовали исходный код ~ / .nvm / nvm.sh после оператора экспорта? - person vikramvi; 24.05.2021
comment
@vikramvi Мы сделали, в последней строке. \. совпадает с source. [ -s ... ] просто проверяет, существует ли файл и не является ли он пустым. Если вы спрашиваете, почему бы не переместить просто строку исходного текста в конец и оставить export NVM_DIR там, где она была изначально, единственная причина - сохранить строки NVM вместе для ясности. Вы можете разделить их, если хотите. - person joeytwiddle; 26.05.2021

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

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

person Jeff Mikels    schedule 08.07.2015
comment
как я могу это проверить? Я подозреваю, что это так. - person Mild Fuzz; 25.09.2015
comment
это был мой случай спасибо! Я устанавливал экспорт вверху в моем файле .zshrc, просто переместите его вниз, и проблема была решена - person Alejandro Silva; 29.05.2016
comment
Это был мой случай. Решением было переместить запись NVM ~ / .bash_profile в конец файла + установить nvm alias default и nvm use на нужную мне версию. - person Eugene Tartakovsky; 28.01.2017
comment
Это было для меня решением. В конец .bashrc перемещено следующее: export NVM_DIR="$HOME/.nvm", затем . "/usr/local/opt/nvm/nvm.sh" - person asmiller; 18.11.2018

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

  1. Полностью удалите nvm с помощью homebrew: brew uninstall nvm
  2. Переустановите brew install nvm
  3. # P2 #
    # P3 #

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

person Joe    schedule 29.09.2015

Если вы попробовали все, но все равно не повезло, попробуйте следующее: _

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 на вашем компьютере, чтобы установить node run nvm install v7.8.0, это будет версия узла по умолчанию, или вы можете установить любую версию узла

person Anand    schedule 14.10.2018
comment
Большое спасибо! Это было единственное решение, которое также устанавливает путь к узлу в bash и сработало для меня. Я просто использовал узел установки nvm для установки последней версии узла, а не использовал nvm install v7.8.0 - person user3492435; 18.11.2018
comment
Я не думаю, что вам нужно повышать привилегии через sudo в 4. Я отредактирую ответ, чтобы удалить, поскольку здесь, похоже, нет никакой пользы от повышения привилегий, поскольку ответ работает в домашнем каталоге. Если это не так, мне любопытно услышать, почему - спасибо! - person Jason R Stevens CFA; 22.12.2020

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

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

person souparno majumder    schedule 22.11.2015
comment
Просто примечание, это зависит от включения v в версию при настройке пульта дистанционного управления. Например. v4.2.4 вместо 4.2.4. - person vaughan; 26.01.2016

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

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh
person Matt Walterspieler    schedule 10.12.2019
comment
Спасибо. это решение является самым простым, если кто-то сталкивается с проблемой на ZSH. - person Akash Kumar Seth; 05.07.2021

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

nvm alias default ''; nvm install 10.14

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

person Community    schedule 07.02.2019

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

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

nvm install 8.10.0

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

nvm use 8.10.0

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

nvm alias default 8.10.0

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

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

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

person Arseniy-II    schedule 05.06.2020

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

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

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

person Mouafa Ahmed    schedule 12.12.2015
comment
Я бы рекомендовал использовать в этой команде &&s вместо ;s. Если which не может найти узел, мы не хотим переходить к chmod /bin/*! - person joeytwiddle; 26.02.2018

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

person Harshit Garg    schedule 23.03.2018
comment
Да! Не уверен, что это из-за того, что я использую оболочку fish, но принятый ответ у меня не сработал. n работает! - person clozach; 28.03.2018

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

person RS1879    schedule 13.02.2020

Если у вас также есть 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
person itsDrew    schedule 01.07.2019

$ nvm alias default {NODE_VERSION}

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

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

$ nvm use default 8.9.4

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

Теперь используется узел v8.9.4 (npm v5.6.0)

person Anish Agarwal    schedule 30.08.2019

В Ubuntu существует потенциальная проблема, если вы запускаете неинтерактивную оболочку, например, из cronjob, или сценария инициализации или выскочки.

В Ubuntu по умолчанию .bashrc есть эта защита наверху, которая отключается раньше, если оболочка не интерактивна:

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

Итак, чтобы загрузить NVM для неинтерактивных сценариев, вы можете отредактировать ~/.bashrc и переместить инициализацию NVM в верхнюю часть файла, прямо над защитой.

Еще безопаснее скопировать файл инициализации NVM, чтобы он отображался дважды. Это решит проблему, упомянутую в других ответах, когда другие строки изменяют PATH после NVM. NVM, похоже, не возражает против того, чтобы его запускали дважды, хотя это немного замедляет запуск оболочки.

person joeytwiddle    schedule 09.03.2021

В скрипте автозагрузки nvm с гитхаба пришлось поменять

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

На моем пути была локальная установка nvm в моей системе, поэтому nvm version продолжал говорить system, несмотря ни на что

person stack_pooper    schedule 14.05.2021

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
person Kiry Meas    schedule 29.05.2021

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

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

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

person tibbus    schedule 03.12.2016
comment
Конечно, установка переменной пути не имеет ничего общего с выбором версии nvm? - person sn0r; 09.07.2017
comment
nvm.sh должен изменить ваш PATH после, который вы его установили (например, с помощью приведенного выше). Это позволило nvm поместить свою версию каталога перед / usr / local / bin, где находится системная версия узла. - person Denis Howe; 18.01.2019