Каким образом VSCode поддерживает NVM? - PullRequest
0 голосов
/ 11 октября 2019

Меня очень смущает поддержка 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

Этот тип ошибки подразумевает, что он обнаружил 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

Установка этого значения в конфигурации ничего не меняет:

    {
      "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$ 

Может кто-нибудь пролить любойсвет на том, как это должно работать?

...