【问题标题】:Visual Studio Code to use node version specified by NVMVisual Studio Code 使用 NVM 指定的节点版本
【发布时间】:2017-11-25 19:03:31
【问题描述】:

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


【解决方案1】:

根据 nvm 的文档,您需要将此代码 sn-p 添加到您的 ~/.bashrc~/.profile~/.zshrc 文件中,因此打开文件并将其粘贴进去,重新启动 vscode 并享受 nvm

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

来源:https://github.com/nvm-sh/nvm#manual-install

【讨论】:

    【解决方案2】:

    如果这些答案都不适合你,

    如果您之前通过下载和解压缩安装了节点。 转到usr/local/lib,就会有一个叫nodejs的人坐在旁边。

    把他踢出去。

    并再次将nvm alias default 设置为首选版本。 就这样,从此幸福快乐。不过至少对我有用。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    以下解决方案对我有用

    1. 首先使用nvm 使用以下命令安装和使用所需的节点版本:nvm install v16.13.1nvm use v16.13.1
    2. 然后在 Linux 上使用which node 命令获取当前使用节点的路径名。 会是这样的/usr/local/nvm/versions/node/v16.13.1/bin/node
    3. 最终在launch.json 中使用此路径名作为runtimeExecutable 选项。

    launch.json 文件

    {
        "version": "0.2.0",
        "configurations": [
            {   
                "type": "pwa-node",
          -->   "runtimeExecutable": "/usr/local/nvm/versions/node/v16.13.1/bin/node",
                "request": "launch",
                "args": ["testcode/hunter.js","127.0.0.1:9229"],
                "name": "Launch Program",
                "skipFiles": [
                    "<node_internals>/**"
                ],
                "program": "${workspaceFolder}/index.js"
            }
        ]
    }
    

    【讨论】:

      【解决方案4】:

      我希望解决方案是特定于工作空间的,并且不需要任何操作(不必在每次启动终端时重做nvm use &lt;version&gt;) 我找到的解决方案:

      1. 在我的项目的 root 中创建 .nvmrc 文件,该文件是我想要使用的旧 节点版本,如 nvm ReadMe 中所述
      2. 在我的 ~/.zshrc 和 ReadMe 中添加自动激活脚本(bashrc 脚本也在自述文件中)

      【讨论】:

        【解决方案5】:

        在 VS 代码中:

        • 转到您的launch.json 文件
        • 在配置中添加runtimeVersion属性,如下所示

        在这个例子中,我们假设 4.8.7 已经使用 nvm 安装:

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

        【讨论】:

        【解决方案6】:

        这里有很多复杂的答案。就我而言,这是由于先前已安装节点造成的。通过删除以下目录修复它:rm -rf /usr/local/bin/npmrm -rf /usr/local/bin/node,然后在VSC中运行nvm use default以获取nvm安装的节点版本。

        【讨论】:

          【解决方案7】:

          如果有人使用 nvm,那么这可能会奏效:

          在 vscode setting.json 中更改 typescript 键如下:

            "code-runner.executorMap": {
          
              // "typescript": "ts-node",
              "typescript": "node -r ${NVM_BIN}/../lib/node_modules/ts-node/register",
          

          如果它适合你,那么这是我的解释。

          首先我试着把它说出来

          ${NVM_BIN}/ts-node/register

          但这没有用。然后我在目录里面看了一下,发现ts-node里面有个symlink:

          ts-node -> ../lib/node_modules/ts-node/dist/bin.js
          

          所以,我想这就是为什么普通的 'ts-node/register' 不能正确解析的原因,因为它实际上变成了 'ts-node/dist/bin.js/register' 这不应该工作。

          希望对某人有所帮助。

          【讨论】:

            【解决方案8】:
            sudo rm -rf /usr/local/opt/node@<YOUR_NODE_VERSION>
            

            然后重新启动可视化代码

            【讨论】:

              【解决方案9】:

              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 用于旧 args 方式:

              【讨论】:

              • 对我来说设置这个工作:"terminal.integrated.defaultProfile.osx": "zsh"不需要"terminal.integrated.profiles.osx"
              【解决方案10】:

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

              • 我正在使用 macOS Big Sur v11.2.1 + VS Code v1.55.1

              Setting pictrue

              【讨论】:

                【解决方案11】:

                在阅读了这个帖子并测试了几乎所有的建议之后,如果你使用 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",
                        },
                    ]
                }
                

                【讨论】:

                  【解决方案12】:

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

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

                  【讨论】:

                    【解决方案13】:

                    我发现在调用代码之前在子shell中本地设置节点版本效果很好,而不会更改当前shell中的版本,例如

                    $ (nvm use 14; code .)
                    

                    因此,要使其对任何项目文件夹透明地工作,请在项目文件夹中创建一个文件 .precode,并在开始代码之前使用 shell 命令来获取源代码 - 例如,

                    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'
                    

                    (注意:在编辑之前打开的任何 shell 中运行 source ~/.bashrc 以使编辑生效。)

                    那么,假设必要的文件~/myproject/.precode存在,起始代码为

                    $ code ~/myproject
                    

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

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

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

                    $ node -v
                    v12.19.1
                    

                    【讨论】:

                      【解决方案14】:

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

                      所以我运行了nvm alias default node,这为我解决了问题。

                      【讨论】:

                      • 当心:nvm alias default node 设置安装的节点的最新版本,而不是您想要的特定版本。
                      【解决方案15】:

                      那么,你的 nvm 配置好了,但是其他版本的 node 还在继续接管?

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

                      1. brew uninstall --force node (yarn 没有系统节点也可以)
                      2. Other version installed from pkg or other non-nvm method
                      3. 重新登录。现在,无论 shell 如何启动,都无法与 nvm 争夺路径。

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

                      【讨论】:

                      • 为了Pete的爱,安装node不用brew。它有一个本地安装程序! nodejs.org/en/download
                      • @jnovack 我的回答涵盖了 卸载 brew 安装的节点版本。请重新阅读。此外,使用brew 安装node 对于不需要nvm 的人来说非常好,并且比原生安装程序具有优势。
                      【解决方案16】:

                      您无需修改​​默认节点版本。以下示例假设节点 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
                      

                      【讨论】:

                        【解决方案17】:

                        提供的一些答案是正确的并且被赞成,但有些不完整。这个过程对我有用:

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

                        奖励:如果您总是想在 VS Code 的终端上获取特定的节点版本,通过打开终端窗口 VS Code 外部并运行将其设置为默认值:

                        nvm alias default v12.14.0
                        

                        【讨论】:

                        • 这是最好的答案!清晰易懂。谢谢!
                        • 这对我不起作用。 nvm 版本为 14.16 时仍设置为 12.19,接下来将尝试 nvm 默认方法。
                        • 非常感谢!小建议。设置属性已弃用。在我的情况下,这有效:“terminal.integrated.defaultProfile.osx”:“zsh”
                        【解决方案18】:

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

                        nvm alias default 7.8.0

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

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

                        重新启动 VS 代码以获取更改。

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

                        【讨论】:

                        • 这也适用于我,但应该有一种简单的方法可以为 VSCode 全局指定节点的路径。
                        • 这不起作用。别名后,我每次使用新终端时都必须使用nvm use default
                        • 对我也不起作用。也没有使用nvm use default
                        • 在此之前我必须删除我的 brew 安装版本的节点。
                        • 我正在使用 WSL 运行 VS Code。设置默认别名后,需要重新启动 VS Code 才能让它接受更改。
                        【解决方案19】:

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

                        如果我没有设置 eslint.runtime 我的系统正在为 eslint 服务器运行节点 v10.11.0,而我希望它运行 v12.13.0,我已经通过 nvm 安装并设置了默认值。

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

                        我尝试在不更改任何启动脚本中的 PATH 的情况下运行 shell,并且 node 的版本仍按预期正确指向 v12,但 VS 代码仍为 eslint 启动 v10。

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

                        解决方案(对我而言):

                        我发现如果我在settings.json 中设置"eslint.runtime": "node",那么当我在终端上使用code . 打开vscode 时,它​​现在将使用处于活动状态的node 的任何版本。只是"node" - 没有路径。

                        【讨论】:

                        • 这个解决方案对我的帮助最大。我也不需要从终端打开代码。
                        • 这个解决方案也适用于 Windows,因为设置运行时参数似乎让 eslint 查看系统路径变量来解析节点二进制文件,而不是使用 vscode 包含的内部版本。
                        【解决方案20】:

                        尤其是外壳我没有问题,但你可以:

                        我遇到了 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”参数是必需的,以便正确解析其余参数。

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

                        【讨论】:

                          【解决方案21】:

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

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

                          【讨论】:

                            【解决方案22】:

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

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

                            【讨论】:

                            • 我也在使用 oh-my-zsh,只有这个解决方案对我有用。太感谢了。现在我不必每次打开 VS Code 时都更改节点版本。
                            • 我遇到了同样的问题,因为在 nvm(和 vscode 插件)已经安装并工作之后,macos 切换到了 zsh。顺便说一句,我不得不重新启动 VSCode(不仅仅是重新加载)来刷新环境。
                            • 这是唯一对我有用的。谢谢!
                            • 使用命名别名是解决此问题的一种方法,但这是唯一真正为我解决问题的方法。
                            【解决方案23】:

                            我有同样的问题,我发现brewnvm 安装了node。我卸载了brew安装的node,现在终端和Visual Studio代码上的版本是一样的。

                            【讨论】:

                              【解决方案24】:

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

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

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

                              【讨论】:

                              • 它正在工作,但是在使用 'nvm use' 后如何自动化这个过程?
                              【解决方案25】:

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

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

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

                              【讨论】:

                              • 如果which node 不同于 cli 而不是 vscode,这就是你的解决方案! ?
                              【解决方案26】:

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

                              " @charsleysa 我知道为什么 nvm 会抛出这个错误。在你的 subshel​​l 中,不知何故 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin您的 PATH 的一部分已从 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 的 PATH 中没有与 nvm 相关的路径),并因您遇到的错误而退出。 macOS 的 /etc/profile(或 /etc/zprofile)调用 /usr/libexec/path_helper,它执行 PATH 切换。

                              在父 shell 中,PATH 中还没有 nvm 目录,因此当 nvm 运行时,它会将其目录添加到路径中。但是在 subshel​​l 中,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 替代方案,以防万一这个没有太大帮助。

                              【讨论】:

                              • 这应该是公认的答案。我之前在launch.json 中设置了runtimeVersion,但这只设置了特定任务的节点版本。这适用于整个集成终端实例。谢谢!注意。我必须在 .zshrc 中设置 PATH 变量,因为我使用 zsh 才能工作
                              • 在阅读了提供的替代链接后 - 这表明问题出在 nvm 及其处理子外壳的方式上 - 我将 nvm 更新到 v0.34.0 并且它在没有重置路径解决方法的情况下工作。
                              【解决方案27】:

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

                              您需要首先打开命令托盘并选择“将'代码'安装到 路径”。

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

                              【讨论】:

                              • 我用这个,发现如果你去VScode工具栏调出'about'页面,它仍然显示旧版本,但如果我使用命令行,它会告诉我它指向升级版本,所以它有点工作。
                              • 这需要关闭VSCode并从命令行重新启动它才能有效工作。
                              • 接受的答案没有帮助,但后来在 VSC 中运行 nvm use default 有帮助。谢谢!
                              • 所以我的问题只是使用项目的 nvmrc 中指定的版本启动 VS 代码。同时我不想更改默认的 nvm 版本,因为我只需要一个单独的节点版本用于一个项目。使用npm use 直接从项目目录打开 VSCode 解决了我的问题。非常感谢!
                              【解决方案28】:

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

                              【讨论】:

                              • @Kiong 你可以创建新文件并将上面的内容复制到其中
                              • 我是否在项目的根目录中创建launch.json 文件?
                              • @Kiong 在项目根目录创建目录“.vscode”,然后在其中创建“launch.json”。
                              • 喜欢这个? “runtimeExecutable”:[ { “type”:“node”,“request”:“launch”,“name”:“App”,“program”:“${workspaceRoot}/index.js”,“runtimeExecutable”:“ ${env:HOME}/.nvm/versions/node/v14.15.4/bin/node" }
                              猜你喜欢
                              • 2018-04-11
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2019-05-16
                              • 2018-04-01
                              • 1970-01-01
                              • 2018-11-08
                              相关资源
                              最近更新 更多