Меня очень смущает поддержка NVM в VSCode.
В документах говорится, что существует Поддержка нескольких версий :
Если вы используете'nvm' (или 'nvm-windows') для управления версиями Node.js можно указать атрибут runtimeVersion
в конфигурации запуска для выбора конкретной версии Node.js:
{
"type": "node",
"request": "launch",
"name": "Launch test",
"runtimeVersion": "7.10.1",
"program": "${workspaceFolder}/test.js"
}
runtimeVersion
, похоже, не очень хорошо работает.
Чтобы получить начальную настройку, я нахожусь на macOS и знаю все о Terminal.app, запускающем оболочку входа в систему.
~/.bash_profile
:
[[ -f ~/.profile ]] && source ~/.profile
[[ -f ~/.bashrc ]] && source ~/.bashrc
~/.profile
:
export NVM_DIR="$HOME/.nvm"
~/.bashrc
:
[[ $- == *i* ]] || return 0
[[ -f /usr/local/opt/nvm/nvm.sh ]] && source /usr/local/opt/nvm/nvm.sh
[[ -f /usr/local/opt/nvm/etc/bash_completion ]] && source /usr/local/opt/nvm/etc/bash_completion
В документах говорится, чтопо умолчанию Узел консоли равен internalConsole
. Я не знаю, что на самом деле internalConsole
или как он узнает о моем ~/.bashrc
или откуда взять nvm.sh
, однако он, похоже, что-то делает.
Запуск конфигурации запуска:
{
"type": "node",
"request": "launch",
"name": "foo1",
"runtimeVersion": "10.15",
"program": "${workspaceFolder}/foo.js"
},
Сбой: ![Node.js version not installed](https://i.stack.imgur.com/skpjf.png)
Этот тип ошибки подразумевает, что он обнаружил nvm
, но использует неправильный NVM_DIR
.
Я могу подтвердить, что 10.15
установлен и работает с bash
в Terminal.app
:
$ echo $NVM_DIR
/Users/jason/.nvm
$ nvm use 10.15
Now using node v10.15.3 (npm v6.4.1)
$ node --version
v10.15.3
Я также могу подтвердить, что VSCode видит переменную окружения NVM_DIR
из моего~/.profile
: ![Developer Tools](https://i.stack.imgur.com/H9NZ8.png)
Установка этого значения в конфигурации ничего не меняет:
{
"type": "node",
"request": "launch",
"name": "foo2",
"runtimeVersion": "10.15",
"program": "${workspaceFolder}/foo.js",
"env": {
"NVM_DIR": "${env:HOME}/.nvm"
}
},
Удивительно, установка console
в integratedTerminal
илиexternalTerminal
тоже ничего не меняет.
Кажется, что console
игнорируется, если указано program
, несмотря на то, что в документах написано:
console -консоль для запуска программы
Я попытался добавить скрипт к package.json
:
"foo": "node --nolazy --inspect-brk=9229 foo.js"
Затемдобавление конфигурации:
{
"type": "node",
"request": "launch",
"name": "foo4",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"foo"
],
"port": 9229
},
Это что-то делает, но я понятия не имею, что. Я ничего не вижу в логах.
Теперь, если я использую integratedTerminal
:
{
"type": "node",
"request": "launch",
"name": "foo5",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"foo"
],
"port": 9229,
"console": "integratedTerminal"
},
Это работает!
bash-3.2$ /usr/local/bin/npm run-script foo
> es-console-spa@0.0.0 foo /source/es-console-spa
> node --nolazy --inspect-brk=9229 foo.js
Debugger listening on ws://127.0.0.1:9229/03df431d-f859-405d-a63f-3cf86ceacb56
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
foo
Waiting for the debugger to disconnect...
Killed: 9
bash-3.2$
Может кто-нибудь пролить любойсвет на том, как это должно работать?