Visual Studio Code使用NVM指定的节点版本

问题描述 投票:29回答:11

VS Code是否可以使用NVM指定的节点版本?

我在本地安装了6.9.2。即使在从OS X终端(不是VS Code终端)切换到另一个版本后,重新启动VS Code,VS Code仍然显示使用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
node.js visual-studio-code nvm
11个回答
33
投票

像这样将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"
}

0
投票

没有尝试过所有的解决方案,但对我来说更新nvm简直有用。

只需按照安装here并确保您更新bash_profile


0
投票

特别是壳我没有问题,但你可以:

我有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(否则将其更改为您的shell)并且您希望使用由nvm配置的default节点版本(您也可以更改它)。

注意:“dummy”参数是必需的,因此可以正确解析其余参数。

对“虚拟”的更长解释:Shell脚本使用位置参数,其中第一个将是脚本位置本身(由$0寻址),当使用-c标志时脚本被读取到位,没有设置$0。 vscode将传递一些参数,例如将被错误解释的节点启动脚本位置,因此“dummy”会将所有参数推送到一个位置。它可以是任何东西,但它必须在那里。


33
投票

解决方案是设置别名default。在OS终端运行 -

nvm alias default 7.8.0

打开vscode,现在运行node -v返回7.8.0

似乎vscode占用了这个(别名默认值)值,而不是由nvm use X.X.X设置的节点版本

更新(12/04/2018) - 此解决方案可能不适用于所有人。其他解决方案请参阅以下答案。


29
投票

在VS Code中,转到launch.json文件并在配置中添加runtimeVersion属性,如下所示。 (在这个例子中,我们假设已经使用nvm安装了4.8.7)

{
"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"
    }
]}

24
投票

我有同样的问题,无法在我的OS X环境中通过nvm保持我的节点版本,不仅使用VSCode,还使用Atom Editor(使用platformio-ide-terminal软件包管理集成终端)。除了我没有使用调试器,而是使用gulp和grunt进行特定任务之外,之前的答案中没有任何建议对我有用。显然nvm至少在这些编辑器中与集成终端或子shell不相处,因为在加载它们时,环境变量$ PATH在内部被修改并根据此问题的一个贡献者在此问题中的注释执行以下操作这里NVM fails to load within nested shell #1652

“@charsleysa我知道为什么nvm会抛出这个错误。在你的子shell中,你的PATH的/ usr / local / bin:/ usr / bin:/ bin:/ usr / sbin:/ sbin部分已经从最后移动了PATH的开始。

  • 当nvm然后启动时,它调用nvm_change_path(我的贡献从nvm_prepend_path将其更改为this),这会修改路径中与nvm相关的部分。
  • Nvm然后通过询问npm它是什么来检查当前的npm前缀。由于/ usr / local / bin / npm现在具有优先权,因此它会报告/ usr / local / bin。
  • 然后Nvm检查npm报告的当前前缀是否在当前nvm节点版本的目录树中(在此阶段,您的默认nvm别名解析为的节点版本的安装目录)。
  • 前缀不是该树的一部分,因此它会自行取消激活(在进程中调用nvm_strip_path,这就是为什么在子shell的PATH中没有与nvm相关的路径),并且出现了错误。 macOS的/ etc / profile(或/ etc / zprofile)调用/ usr / libexec / path_helper,它执行PATH switcheroo。

在父shell中,PATH中还没有nvm目录,因此在nvm运行时,它会将其目录添加到路径中。但是在子shell中,PATH已经被macOS重新配置,以便将任何非系统目录放在最后,我们就遇到了问题。“

启动任何集成终端时,我总是收到此消息:

nvm与npm config“prefix”选项不兼容:当前设置为“/ usr / local”运行npm config delete prefixnvm use --delete-prefix vx.x.x --silent以取消设置。

在我的案例中我做了解决这个问题的是报告的同一问题的“解决方法”部分基本上如下:

  • 通过在我的〜/ .bash_profile中添加以下行来重置路径:在其他任何地方之前:PATH =“/ usr / local / bin:$(getconf PATH)”

之后,当我在两个编辑器上启动任何集成终端时,没有更多的警告,我可以与nvm进行交互,轻松地在任何节点版本之间切换,而不会出现任何问题。

这是another替代,以防万一这个没有多大帮助。


14
投票

我有同样的问题,但上述答案没有帮助。

显然,当我使用shellArgs时,osx的默认bash设置为zsh。我通过将用户设置中的shellArgs设置为空数组来解决问题:

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


8
投票

我发现的另一种解决方案是在使用nvm选择节点后从shell中启动代码。

您需要先打开命令面板,然后选择“安装'代码'到路径中”。

enter image description here

然后启动终端并通过nvm选择您的节点,然后启动“代码”。

enter image description here


6
投票

我正在使用oh-my-zsh,它也没有使用nvm指定的节点版本。试过这里发布的一些建议,但我设法解决这个问题的唯一方法是在~/.zshrc的顶部添加以下行

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

2
投票

我尝试了所有建议的解决方案,但没有任何工作。

/ usr / local / bin / node指向某个地方。我为特定的nvm节点文件夹创建了一个符号链接,这就解决了我的问题:

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

0
投票

我有同样的问题,我发现我有由nodebrew安装的nvm。我卸载了由node安装的brew,终端和visual studio代码的版本现在都是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.