Код 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.