nvm зберігає вузол "забуття" в новому термінальному сеансі


545

Використовуючи новий термінальний сеанс в 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

Якась підказка, що я роблю неправильно?


1
Просто хочу тут додати це. Переконайтесь, що ви експортуєте з, .bash_profileа не свого.bashrc
James111

Відповіді:


1181

Спробуйте nvm alias default. Наприклад:

$ nvm alias default 0.12.7

Це встановлює версію вузла за замовчуванням у вашій оболонці. Потім переконайтеся, що зміна зберігається, закривши вікно оболонки, відкривши нове, а потім: node --version


11
Це вже не робота з використання nvm? Після $ nvm alias default 0.11.13і $ nvm use 0.11.12я отримую node --version = 0.11.12. І все-таки у новому сеансі вузол знову відсутній. У debian у мене взагалі немає цієї проблеми.
frhd

4
Добре, Ive була помилка: 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

2
! ПОПЕРЕДЖЕННЯ: Версія "вузол" не існує. за замовчуванням -> вузол (-> N / A)?
House3272

6
Про що node alias default stable?
П’єр Генрі

1
Я не думаю, що ти більше хочеш використовувати stable. З документів nvm: "стабільний: цей псевдонім застарілий і стосується дійсно лише до вузла v0.12 та більш ранніх версій. В даний час це псевдонім для вузла."
фері

1
До чого nodeвідповідає цей дефолт? Вузол, встановлений і використаний NVM в поточній оболонці, або Вузол, можливо, встановлений в системі за допомогою інсталяційного пакета 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)

Це чудово спрацювало, і пропозиція використовувати 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. Мені це здається помилкою в баші, але я можу помилятися.)


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 до кінця файлу + набору nvm alias defaultта nvm useдо потрібної мені версії.
Євген Тартаковський

Це було рішенням для мене. Переніс наступне до низу .bashrc: export NVM_DIR="$HOME/.nvm"тоді. "/usr/local/opt/nvm/nvm.sh"
асміллер

10

Найкращі рішення для мене, схоже, не спрацювали. Моє рішення нижче:

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

    mkdir ~ / .nvm cp $ (brew - префікс nvm) / nvm-exec ~ / .nvm / export NVM_DIR = ~ / .nvm source $ (brew - префікс nvm) /nvm.sh

Викладені вище кроки додадуть робочий каталог NVM у ваш $ HOME шлях, скопіюйте nvm-exec в робочу директорію NVM та додайте в $ HOME / .bashrc, $ HOME / .zshrc або еквівалентний файл конфігурації вашої оболонки. (Знову взято з чого перелічено в установці NVM за допомогою домашньої мови)


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це буде версією вузла за замовчуванням або ви можете встановити будь-яку версію вузла


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


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

0

Я зіткнувся з тією ж проблемою під час використання інтегрованого терміналу в редакторі VS Code. Перезапуск коду VS після зміни версії вузла за допомогою nvm вирішив проблему для мене.


0

Ось проста інструкція:

1) Встановіть:

nvm install 8.10.0

2) Використовуйте один раз на терміналі

nvm use 8.10.0

3) Встановити за замовчуванням для всіх терміналів

nvm alias default 8.10.0

Можливо, вам доведеться використовувати кореневі дозволи для виконання цих дій.

І не забудьте перевірити документацію nvm для отримання додаткової інформації.

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


-2

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

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

Якщо у вас є, коментуйте / видаліть, і nvm повинен почати обробляти версію вузла за замовчуванням.


Встановлення змінної шляху точно не має нічого спільного з вибором версії nvm?
sn0r

nvm.sh повинен змінити ваш PATH після його встановлення (наприклад, з вищевказаним). Це дозволить nvm поставити свою каталог версій перед / usr / local / bin, де живе "системна" версія вузла.
Денис Хоу

-3

Після тривалого конфлікту з цим питанням я знайшов, як це виправити. Ось покрокове вирішення проблеми:

  • Відкрийте термінал та встановіть інструменти для розробників командного рядка:

    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

  • Відкрити 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Після завершення редагування файлу натисніть клавішу (ви побачите, що режим ВСТУПНЕННЯ зникає).

  • Натисніть, :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, встановлених у вашій системі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.