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

时间:2017-06-22 13:12:42

标签: node.js visual-studio-code nvm

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 Code Terminal

MacBook-Pro-3:QB-Invoice-API mac$ node -v
v6.9.2

22 个答案:

答案 0 :(得分:32)

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

nvm alias default 7.8.0

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

似乎vscode占用了这个(别名默认值)值而不是由nvm use X.X.X

设置的节点版本

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

答案 1 :(得分:26)

add runtimeExecutable to your .vscode/launch.json like this

{
  "type": "node",
  "request": "launch",
  "name": "App",
  "program": "${workspaceRoot}/index.js",
  "runtimeExecutable": "${env:HOME}/.nvm/versions/node/v6.9.2/bin/node"
}

答案 2 :(得分:23)

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

答案 3 :(得分:19)

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

  

&#34; @charsleysa 我知道为什么nvm会抛出这个错误。在你的子shell中,不知何故,PATH的/ 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,这就是为什么在子shell的路径中没有与nvm相关的路径),并且使用你得到的错误。   macOS&s / etc / profile(或/ etc / zprofile)调用/ usr / libexec / path_helper,它执行PATH切换器。
  •   
     

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

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

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

在我的案例中,我为解决这个问题所采取的措施是&#34;解决方法&#34;报告的同一问题的一部分基本上如下:

  • 通过在我的〜/ .bash_profile内部添加以下行来重置路径: PATH =&#34; / usr / local / bin:$(getconf PATH)&#34;

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

这是another替代,以防这个没有那么多帮助。

答案 4 :(得分:11)

我遇到了同样的问题,但是上面的答案没有帮助。

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

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

答案 5 :(得分:10)

提供的某些答案是正确的,但有些不完整。此过程对我有用:

  1. 打开终端窗口 VS Code ,然后运行node -v。例如,您将获得v10.12.0
  2. 打开终端窗口 外部 VS代码使用 nvm 更改节点版本(即{{1 }})
  3. nvm use v12.14.0 + Cmd + Shift并选择首选项>打开设置(JSON)
  4. p添加到您的用户配置
  5. "terminal.integrated.shellArgs.osx": [] + Cmd + Shift并选择 Shell命令:在PATH中安装“代码”命令
  6. 关闭 VS代码
  7. 打开一个终端窗口,然后运行p。这将使用新的和更新的code / bash会话打开 VS Code
  8. 打开终端窗口 VS Code ,然后运行zsh。您会得到node -v

奖金: :如果您始终 希望在 VS Code 的终端上获取特定的节点版本,通过打开终端窗口 外部 VS Code 并运行以下命令将其设置为默认值:

v12.14.0

答案 6 :(得分:8)

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

您需要先打开命令托盘并选择&#34;安装代码&#39;成 路径&#34;

enter image description here

然后启动终端并通过nvm选择您的节点,然后启动&#34;代码&#34;。

enter image description here

答案 7 :(得分:3)

我正在使用 oh-my-zsh ,它也没有使用nvm指定的节点版本。尝试了此处发布的一些建议,但我设法解决此问题的唯一方法是在~/.zshrc

的顶部添加以下行
PATH="/usr/local/bin:$(getconf PATH)"

答案 8 :(得分: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

答案 9 :(得分:1)

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

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

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

答案 10 :(得分:1)

其他解决方案都不适合我。

所以我跑了nvm alias default node,这为我解决了。

答案 11 :(得分:0)

sudo rm -rf /usr/local/opt/node@<YOUR_NODE_VERSION>

然后重新启动可视化代码

答案 12 :(得分:0)

VSCode Shell args 似乎已弃用,这里使用 VS Code 的 settings.json 中的配置文件进行更新:

这摆脱了 -l 终端参数,将其转换为交互式 shell 与登录 shell。

"terminal.integrated.profiles.osx": {
    "zsh (normal - me)": {
        "path": "zsh",
        "args": []
    }
},
"terminal.integrated.defaultProfile.osx": "zsh (normal - me)"

谢谢!答案 here 用于解释,here 用于旧参数方式:

答案 13 :(得分:0)

检查您的 MAC 上的默认交互式 shell。 如果是zsh,那么VS Code 中的终端也设置为zsh 模式怎么样?然后就可以在Mac上使用指定的node版本了。这对我有用。

  • 我使用的是 macOS Big Sur v11.2.1 + VS Code v1.55.1

Setting pictrue

答案 14 :(得分:0)

在阅读此线程并测试几乎所有建议后,如果您使用 nvm,我找到了一个非常简单的解决方案:在命令中添加 nvm use

启动调试器需要更多时间,但对我来说这是值得的,因为现在我不必每次开始在不同的地方工作时都执行 nvm use 并通过终端打开 Vscode项目。

这是我的 .vscode/launch.json 文件。祝你好运!

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "command": "nvm use && yarn start",
            "name": "Launch",
            "request": "launch",
            "type": "node-terminal",
        },
    ]
}

答案 15 :(得分:0)

我尝试了顶部的几个选项,但它们都不起作用。我找到了一个简单的解决方案。在 VS Code 终端中:

  1. 点击终端下拉菜单上的向下箭头
  2. 选择默认外壳
  3. 选择“bash”
  4. 尝试node -v,它应该返回设置为默认值的正确版本nvm alias default v12.14.0

答案 16 :(得分: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

将在shell上产生一些诊断输出,例如

source github/myproject/.precode
Now using node v14.15.1 (npm v6.14.8)

以及在终端窗口和调试器中启动具有正确节点版本的新的vscode窗口。但是,在启动它的外壳中,原始节点版本仍然保留,例如

$ node -v
v12.19.1

答案 17 :(得分:0)

因此,您的nvm配置良好,但是其他版本的节点STILL仍在接管吗?

删除所有非nvm版本的节点:

  1. brew uninstall --force node(如果没有系统节点,则纱线会很好)
  2. Other version installed from pkg or other non-nvm method
  3. 重新登录。现在,无论shell如何启动,nvm都无法为路径而战。

注意:安装/升级纱线时,请使用brew install yarn --without-node

答案 18 :(得分:0)

我遇到了同样的问题,并且发现了一个奇怪的解决方法,该解决方法将来可能会对其他人有所帮助。

如果未设置eslint.runtime,则系统正在运行eslint服务器的节点v10.11.0,而我希望它运行已安装并通过{{1 }}。

我发现v12.13.0根据@franziga的答案安装了节点的v10版本,但是我想要的节点版本由nvm安装了。因此,我通过brew卸载了brew并关闭/重新打开了VS Code。奇怪的是,eslint仍在报告它已开始使用v10。

我尝试在没有任何启动脚本的情况下对我的nvm进行任何更改的外壳程序,并且节点版本仍然按预期正确指向v12,但是VS代码仍然为eslint启动了v10。

我不确定如何检查eslint正在运行的可执行文件的路径,如果我打开集成终端,则在预期版本的节点(v12)上一切正常。

解决方案(对我来说):

我发现,如果我在v10.11.0中设置PATH,则它将使用我在终端上使用"eslint.runtime": "node"打开vscode时激活的settings.json版本。只是node-没有路径。

答案 19 :(得分: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将传递一些参数,例如节点启动脚本的位置将被错误地解释,因此“虚拟”将所有参数推到一个位置。它可以是任何东西,但必须存在。

答案 20 :(得分:0)

没有尝试所有解决方案,但对我来说,更新nvm确实可行。

只需按照安装here进行操作,并确保您bash_profile已更新。

答案 21 :(得分:0)

我遇到了同样的问题,发现nodebrew安装了nvm。我卸载了node安装的brew,现在终端和Visual Studio代码上的版本都相同。