Код Visual Studio для використання версії вузла, визначеної NVM


81

Чи можливо для VS Code використовувати версію вузла, визначену NVM?

У мене встановлено 6.9.2 локально. Навіть після переходу на іншу версію з терміналу OS X (не терміналу VS Code), перезапуску VS Code, код VS все одно відображається за допомогою 6.9.2.

Термінал OS X

MacBook-Pro-3:~ mac$ node -v
v7.8.0

Кодовий термінал VS

MacBook-Pro-3:QB-Invoice-API mac$ node -v
v6.9.2

Пов'язані (і можливо дублювання): stackoverflow.com/questions/24585261 / ...
Gyuri

Відповіді:


86

У VS Code перейдіть до файлу launch.json і додайте атрибут runtimeVersion всередині конфігурацій, як показано нижче. (У цьому прикладі ми припускаємо, що 4.8.7 вже встановлено за допомогою nvm)

{
"version": "<some-version>",
"configurations": [
    {
        "type": "node",
        "runtimeVersion": "4.8.7", // If i need to run node 4.8.7
        "request": "launch",
        "name": "Launch",
        "program": "${workspaceFolder}/sample.js"
    }
]}

4
Я збирався запитати, як Code знає, де знайти цю версію, але, мабуть, ця опція була додана спеціально для nvm. code.visualstudio.com/docs/nodejs/…
Брайан Вітт,

2
Де launch.jsonфайл?
Петрус Терон

@PetrusTheron, якщо у вас його ще немає, його доведеться створити. Тут є вказівки: code.visualstudio.com/docs/editor/debugging#_run-view
Джоел Гловір,

67

Рішення - встановити псевдонім default. У запуску терміналу ОС -

nvm alias default 7.8.0

Відкрийте vscode, тепер запущено node -vповернення7.8.0

Здається, vscode приймає це (псевдонім) значення, а не версію вузла, встановлену nvm use X.X.X

Перезапустіть код VS, щоб він зміг змінити.

Оновлення (04.04.2018) - Це рішення може працювати не для всіх. Будь ласка, дивіться відповіді нижче для інших рішень.


1
Це спрацювало і для мене, але повинен бути простий спосіб вказати шлях до глобального вузла для VSCode.
молодший

3
Це не спрацювало. Після псевдоніма я повинен використовувати nvm use defaultкожен раз, коли використовую новий термінал
Рамеш Парік,

Мені теж не вдалося. Також не використовував nvm use default.
Метт Санчес,

2
Перш ніж це спрацювало, мені довелося видалити мою версію вузла, встановлену заварюванням.
samlandfried

2
Я запускаю код VS з WSL. Після встановлення псевдоніма за замовчуванням необхідно перезапустити код VS, щоб він зміг змінити.
Джон Міллс

51

додати runtimeExecutable до свого .vscode/launch.jsonподібного

{
  "type": "node",
  "request": "launch",
  "name": "App",
  "program": "${workspaceRoot}/index.js",
  "runtimeExecutable": "${env:HOME}/.nvm/versions/node/v6.9.2/bin/node"
}

@Kiong, ви можете створити новий файл і скопіювати до нього вміст
Alongkorn Chetasumon

чи створювати launch.jsonфайл у кореневій частині мого проекту?
Kiong

1
@Kiong створити каталог ".vscode" у корені вашого проекту, а потім створити "launch.json" всередині нього.
Alongkorn Chetasumon

39

У мене була та сама проблема, що я не міг зберегти мою версію вузла через nvm у моєму середовищі OS X не тільки за допомогою VSCode, але й за допомогою редактора Atom (використовуючи пакет platformio-ide-terminal для управління інтегрованим в ньому терміналом). Жодна з пропозицій у попередніх відповідях не працювала для мене, крім того, що я не використовував налагоджувач, а використовував глоток та бурчання для конкретних завдань. Очевидно, що nvm не ладнає з інтегрованими терміналами або допоміжними оболонками принаймні в цих редакторах, оскільки при завантаженні їх змінна середовища $ PATH модифікується внутрішньо і робить наступне згідно з коментарем одного з авторів цього пакету у цьому випуску тут NVM не вдається завантажити всередині вкладеної оболонки # 1652 :

" @charsleysa Я знаю, чому nvm викидає цю помилку. У вашій підшерепці якось / usr / local / bin: / usr / bin: / bin: / usr / sbin: / sbin частина вашого PATH була переміщена з кінця шляху до початку.

  • Коли nvm запускається, він викликає nvm_change_path (мій внесок змінив його на nvm_prepend_path), який змінює відповідну nvm частину шляху на місці.
  • Потім Nvm перевіряє поточний префікс npm, запитуючи npm, що це таке. Оскільки / usr / local / bin / npm тепер має перевагу, він повідомляє / usr / local / bin.
  • Потім Nvm перевіряє, чи присутній поточний префікс, про який повідомляє npm, у дереві каталогів поточної версії nvm-вузла (на цьому етапі каталог інсталяції версії вузла, до якого вирішено псевдонім nvm за замовчуванням).
  • Префікс не є частиною цього дерева, тому він деактивується сам (викликаючи nvm_strip_path у процесі, саме тому у PATH вашої підшелупки немає шляху, пов’язаного з nvm), і виходить із помилкою, яку ви отримуєте. macOS / etc / profile (або / etc / zprofile) викликає / usr / libexec / path_helper, що робить перемикання PATH.

У батьківській оболонці PATH ще не має каталогу nvm, тому до моменту запуску nvm він додає каталог до шляху. Але в підшарку PATH було переналаштовано macOS, щоб розмістити будь-які несистемні каталоги в кінці, і ми маємо проблему. "

Я завжди отримував це повідомлення під час запуску будь-якого інтегрованого терміналу:

nvm не сумісний з параметром "префікс" конфігурації npm: наразі встановлено значення "/ usr / local" Виконати npm config delete prefixабо nvm use --delete-prefix vx.x.x --silentскасувати його.

Що я зробив, щоб вирішити це у моєму випадку, це частина "обхідного шляху" того самого повідомлення, яка є, по суті, наступним:

  • Скиньте шлях, додавши такий рядок всередині мого ~ / .bash_profile в самому верху перед будь-чим іншим: PATH = "/ usr / local / bin: $ (getconf PATH)"

І після цього більше немає попереджень, коли я запускаю будь-який інтегрований термінал на обох редакторах, і я можу взаємодіяти з nvm, щоб легко і без проблем переключатися між будь-якими версіями вузлів.

Тут це ще одна альтернатива на випадок, якщо вона не допоможе так сильно.


2
Це має бути прийнятою відповіддю. Раніше я встановлював runtimeVersionфайл in launch.json, але це встановлює лише версію вузла для певного завдання. Це працює на всьому екземплярі інтегрованого терміналу. Дякую! Примітка. Мені довелося встановити .zshrc
змінний

Прочитавши альтернативне посилання, яке передбачало проблему з nvm та способом його обробки підшелушок, я оновив nvm до v0.34.0, і він працює без обхідного шляху скидання.
timiscoding

22

У мене була та сама проблема, але наведені вище відповіді не допомогли.

Очевидно, за замовчуванням shellArgsдля osx встановлено значення, bashпоки я використовую zsh. Я вирішив проблему, встановивши shellArgsв моїх налаштуваннях користувача порожній масив:

"terminal.integrated.shellArgs.osx": []


2
Якщо which nodeвоно відрізняється від cli, ніж vscode, це ваше рішення! 🚀
манекераж

18

Я використовую oh-my-zsh, і він також не використовував версію вузла, вказану nvm. Спробував кілька пропозицій, опублікованих тут, але єдиним способом, яким мені вдалося вирішити цю проблему, було додавання наступного рядка у верхню частину~/.zshrc

PATH="/usr/local/bin:$(getconf PATH)"

2
Я також використовую oh-my-zsh, і тільки це рішення працювало для мене. Дуже дякую. Тепер мені не потрібно змінювати версію вузла кожного разу, коли я відкриваю код VS.
Rameshwor Maharjan

1
У мене була та сама проблема, оскільки macos перейшов на zsh після того, як nvm (і плагін vscode) уже встановлений і працює. До речі, мені довелося перезапустити VSCode (а не просто перезавантажити), щоб оновити env.
tutuDajuju

1
Це єдиний працював у мене. Дякую!
Рафаель Розон

12

Я знайшов альтернативне рішення - просто запустити код із оболонки після того, як ви вибрали свій вузол за допомогою nvm.

Спочатку потрібно відкрити піддон команд і вибрати "встановити 'код' у шлях".

введіть тут опис зображення

А потім запустіть термінал і виберіть свій вузол через nvm, а потім запустіть "код".

введіть тут опис зображення


Я використав це і виявив, що якщо ви перейдете на панель інструментів VScode і відкриєте сторінку "приблизно", вона все ще відображає стару версію, але якщо я використовую командний рядок, він скаже мені, що вказує на оновлена ​​версія, так що це як би працює.
Harvey Lin

Для цього потрібно закрити VSCode і перезапустити його з командного рядка для ефективної роботи.
Уоллес Сідре 02.03.20

11

Деякі з наданих відповідей є правильними та прихильними, але дещо неповними. Ця процедура спрацювала для мене:

  1. Відкрийте вікно терміналу всередині VS Code та запустіть node -v. Ви отримаєте, наприкладv10.12.0 .
  2. Відкрийте вікно терміналу поза кодом VS Змініть версію вузла за допомогою nvm (тобто. nvm use v12.14.0)
  3. Cmd+ Shift+ pі виберіть Налаштування> Відкрити налаштування (JSON)
  4. Додайте "terminal.integrated.shellArgs.osx": []до конфігурації користувача
  5. Cmd+ Shift+ pі виберіть команду Shell: встановіть команду 'code' у PATH
  6. Закрийте код VS .
  7. Відкрийте вікно терміналу і запустіть code. Це відкриє код VS з новим та оновленим bash/zsh сеансом.
  8. Відкрийте вікно терміналу всередині VS Code та запустіть node -v. Ви отримаєте v12.14.0.

Бонус: Якщо ви завжди хочете отримати певну версію вузла натерміналі VS Code , встановіть його за замовчуванням, відкривши вікно терміналу за межами VS Code та запустивши:

nvm alias default v12.14.0

4

Я спробував усі запропоновані рішення, але нічого не працювало.

/ usr / local / bin / node вказував кудись. я зробив символічне посилання на певну папку nvm-вузла, і це вирішувало проблему для мене:

ln -s /Users/mad/.nvm/versions/node/v11.1.0/bin/node /usr/local/bin/node

Це працює, але як автоматизувати цей процес після використання 'nvm use'?
Євген Залівадний

4

Особливо з оболонкою у мене не було проблем, але ви можете:

  • переконайтеся, що ваша оболонка правильно налаштована або змінена (можливо, ви використовуєте різні оболонки для vscode або вашого терміналу)
  • перевірте env, і якщо він неправильно встановлений, використовуйте terminal.integrated.env.<platform>

У мене були проблеми з самим vscode, і жодне рішення мені не допомогло. Отже, я закінчив використовувати наступний сценарій запуску.

    {
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "program": "${workspaceFolder}/server.js",
        "runtimeExecutable": "/bin/bash",
        "runtimeArgs": ["-c", ". ~/.nvm/nvm.sh;nvm run default \"$@\"", "dummy"]
    },

це передбачає, що ви налаштували його для bash (інакше змініть його на свою оболонку), і ви хочете використовувати defaultверсію вузла, налаштовану nvm (ви також можете змінити її).

Примітка : Необхідний параметр "фіктивний", щоб решта параметрів були правильно проаналізовані.

Більш довге пояснення "фіктивного": Сценарії оболонки використовують позиційні параметри, де першим буде саме розташування сценарію (адресується $0), при використанні -cпрапора скрипт читається замість того, щоб не $0було встановлено. vscode передасть деякі аргументи, наприклад розташування сценарію запуску вузла, яке буде неправильно інтерпретовано, тому "фіктивний" висуває всі параметри в одне місце. Це може бути що завгодно, але воно повинно бути там.


4

У мене виникла така сама проблема, і я знайшов дивне обхідне рішення, яке може бути корисним для когось у майбутньому.

Якщо я не встановив, що у eslint.runtimeмоїй системі працює вузол v10.11.0для сервера eslint, тоді як я хотів, щоб вона працювала, v12.13.0яку я встановив і зробив за замовчуванням nvm.

Я виявив, що v10 версію вузла було встановлено на brewоснові відповіді @ franziga, але мою бажану версію вузла встановив nvm. Отже, я видалив v10.11.0за допомогою заварювання та закрив / відновив код VS. Дивно, але eslint все ще повідомляв, що його почали використовувати v10.

Я спробував запустити оболонку без будь-яких змін до мого PATH в будь-яких сценаріях запуску, і версія вузла все ще була правильно вказана на v12, як очікувалося, але код VS все ще запускається v10 для eslint.

Я не впевнений, як перевірити шлях до виконуваного файлу, яким керує eslint, і якщо я відкрию інтегрований термінал, все працює нормально з очікуваною версією вузла (v12).

Рішення (для мене):

Я виявив , що , якщо я викладу "eslint.runtime": "node"в settings.jsonтому , що він тепер буде використовувати ту версію nodeбуло активно , коли я відкрив vscode використання code .на терміналі. Просто "node"- шляху немає.


1
Це рішення мені допомогло найкраще. Мені також не потрібно було відкривати код з терміналу.
Метт Шеріх,

2

У мене така сама проблема, і я виявив, що nodeвстановив програму brewі nvm. Я видалив nodeвстановлену програму , brewі версії як на терміналі, так і на коді Visual Studio однакові.


2

Вам не потрібно змінювати версію вузла за замовчуванням. У наступному прикладі передбачається, що вузол 6 є вашою версією за замовчуванням, і ви хочете, щоб VSCode посилався на версію 7 вузла:

# open a terminal instance
nvm use 7
code . # or project folder instead of "."
# when VSCode start, you may use ctrl+` to open the integrated terminal
# then check the node version in the integrated terminal
node -v # should print 7

1

Жодне з інших рішень не спрацювало для мене.

Тож я побіг, nvm alias default nodeі це мені це виправило.


1
Обережно: nvm alias default nodeвстановлює САМУ СУЧАСНУ версію встановленого вузла, а не конкретну версію, яку ви хочете.
jnovack

0

Не спробував всього рішення, але для мене оновлення nvm просто спрацювало.

Просто виконайте встановлення тут і переконайтесь, що ви bash_profileоновлені.


0

Отже, ваш nvm налаштований добре, але інша версія вузла ЩЕ продовжує приймати?

Видаліть усі версії node, що не є nvm:

  1. brew uninstall --force node (пряжа буде добре без системного вузла)
  2. Інша версія, встановлена ​​з pkg або іншого методу, що не є nvm
  3. Повторно ввійти. Зараз ніщо не може боротися за шлях із nvm, незалежно від запуску оболонки.

Примітка: Під час встановлення / модернізації пряжі використовуйте brew install yarn --without-node


Для любові Піта немає необхідності використовувати brewдля встановлення вузол. Він має власний інсталятор! nodejs.org/en/download
jnovack

@jnovack Моя відповідь стосується видалення встановленої у версії версії вузла. Будь ласка, перечитайте його. Крім того, використання brewдля встановлення вузла цілком підходить для людей, яким це не потрібно nvmі має переваги перед власним інсталятором.
Степан

0

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

$ (nvm use 14; code .)

Тому, щоб вона працювала прозоро для будь-якої папки проекту, створіть файл .precodeу папці проекту з командами оболонки до джерела перед початковим кодом - наприклад,

nvm use 14

Потім додайте до ~/.bashrc

pre_code(){
    if [ $# == 1 ] &&  [ -f ${1}/.precode ] ; then
        echo "(source ${1}/.precode ;  `which code` ${@})"
        (source ${1}/.precode ; `which code` ${@})
    else
        `which code` ${@}
    fi
}   
alias code='pre_code'

(Примітка: Запустіть source ~/.bashrcбудь-яку оболонку, відкриту перед редагуванням, щоб редагування набрало чинності.)

Потім, припускаючи, що необхідний файл ~/myproject/.precodeіснує, стартовий код з

$ code ~/myproject

призведе до певного діагностичного виводу на оболонку, наприклад

source github/myproject/.precode
Now using node v14.15.1 (npm v6.14.8)

а також запуск нового вікна vscode з правильною версією вузла у вікні терміналу та налагоджувачі. Однак у оболонці, з якої він був запущений, залишається оригінальна версія вузла, наприклад

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