Visual Studio Code to use node version specified by NVM

后端 未结 17 1182
渐次进展
渐次进展 2020-12-07 16:01

Is it possible for VS Code to use node version specified by NVM?

I have 6.9.2 installed locally. Even after switching to another version, from the OS X terminal (no

相关标签:
17条回答
  • 2020-12-07 16:52

    I had the same problem of being unable to keep my node version specified trough nvm in my OS X environment not only with VSCode but also with Atom Editor (using the platformio-ide-terminal package for managing the integrated terminal in it). None of the suggestions in the previous answers worked for me, besides me not using the debugger but using gulp and grunt for specific tasks. Apparently nvm does not get along with the integrated terminals or sub shells at least in these editors because when loading them the environment variable $PATH is modified internally and does the following according to a comment by one of the contributors of this package in this issue reported here NVM fails to load within nested shell #1652:

    " @charsleysa I know why nvm is throwing this error. In your subshell, somehow the /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin part of your PATH has been moved from the end of the PATH to the start.

    • When nvm is then started, it calls nvm_change_path (my contribution changed it to this from nvm_prepend_path), which modifies the nvm-relevant part of the path in place.
    • Nvm then checks the current npm prefix by asking npm what it is. Since /usr/local/bin/npm now has precendence, it reports /usr/local/bin.
    • Nvm then checks whether the current prefix as reported by npm is in the directory tree of the current nvm node version (at this stage, the installation directory of the node version your default nvm alias resolves to).
    • The prefix is not part of that tree, so it deactivates itself (calling nvm_strip_path in the process, which is why there's no nvm-related path in your subshell's PATH), and bails with the error you're getting. macOS's /etc/profile (or /etc/zprofile) calls /usr/libexec/path_helper, which does the PATH switcheroo.

    In the parent shell, the PATH doesn't yet have an nvm dir in it, so by the time nvm runs, it prepends its directory to the path. But in the subshell, PATH has been reconfigured by macOS to put any non-system directories at the end and we have the problem."

    I was always getting this message when launching any integrated terminal:

    nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local" Run npm config delete prefix or nvm use --delete-prefix vx.x.x --silent to unset it.

    What I did to solve this in my case was the "workaround" part of that same issue reported which is essentially the following:

    • Reset the path by adding the following line inside my ~/.bash_profile at the very top before anything else: PATH="/usr/local/bin:$(getconf PATH)"

    And after that no more warnings when I launch any integrated terminal on both editors and I can interact with nvm to switch between any node version easily and without problems at all.

    Here it is another alternative just in case this one doesn`t help that much.

    0 讨论(0)
  • 2020-12-07 16:52

    I tried all the suggested solutions but nothing was working.

    /usr/local/bin/node was pointing to somewhere. i made a symlink to a specific nvm node folder and that was solving the issue for me:

    ln -s /Users/mad/.nvm/versions/node/v11.1.0/bin/node /usr/local/bin/node
    
    0 讨论(0)
  • 2020-12-07 16:54

    The solution is to set alias default. In the OS terminal run -

    nvm alias default 7.8.0

    Open vscode, now running node -v returns 7.8.0

    It seems vscode takes up this (alias default) value and not the node version that is set by nvm use X.X.X

    Restart VS code for it to pick up the changes.

    Update (12/04/2018) - This solution might not work for everyone. Please see below answers for other solutions.

    0 讨论(0)
  • 2020-12-07 16:55

    I am using oh-my-zsh and it too was not using the node version specified by nvm. Tried several suggestions posted here, but the only way I managed to resolve this issue was by adding the following line to the top of ~/.zshrc

    PATH="/usr/local/bin:$(getconf PATH)"
    
    0 讨论(0)
  • 2020-12-07 16:55

    None of the other solutions worked for me.

    So I ran nvm alias default node and this fixed it for me.

    0 讨论(0)
  • 2020-12-07 16:57

    Particularly with the shell I had no problems, but you may:

    • check your shell is properly configure or change it (you might be using different shells for vscode or your terminal)
    • check your env and if it's not properly set use the terminal.integrated.env.<platform>

    I had issues with vscode itself and no solution could help me. So I finished using the following launch script.

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

    this assumes you have it configure for bash (otherwise change it to your shell) and you want to use the default node version as configured by nvm (you may also change it).

    Note: The "dummy" parameter is required so the rest of the parameters are properly parsed.

    A longer explanation of "dummy": Shell scripts use positional parameters where the first one will be the script location itself (addressed by $0), when using the -c flag the script is read inplace an there is no $0 being set. vscode will pass some arguments, like the node start script location which will be wrongly interpreted, so "dummy" pushes all parameters one spot. It can be just anything, but it must be there.

    0 讨论(0)
提交回复
热议问题