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

Ase*_*tam 47 node.js nvm visual-studio-code

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
Run Code Online (Sandbox Code Playgroud)

VS代码终端

MacBook-Pro-3:QB-Invoice-API mac$ node -v
v6.9.2
Run Code Online (Sandbox Code Playgroud)

小智 48

在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"
    }
]}
Run Code Online (Sandbox Code Playgroud)

  • 我想问代码如何知道在哪里可以找到这个版本,但显然,这个选项是专门为 nvm 添加的。https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_multi-version-support (5认同)
  • “launch.json”文件在哪里? (2认同)
  • @PetrusTheron 如果您还没有,您可以创建一个。这里有说明:https://code.visualstudio.com/docs/editor/debugging#_run-view (2认同)
  • 将“runtimeVersion”设置为“默认”解决了我的问题。 (2认同)

Ase*_*tam 41

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

nvm alias default 7.8.0

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

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

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

  • 如果这对您不起作用,请确保在 VS Code 重新启动后创建新终端。如果 VS Code 恢复以前的控制台上下文,它不会选择新的默认节点版本。 (4认同)
  • 我正在使用 WSL 运行 VS Code。设置默认别名后,需要重新启动 VS Code 才能使其生效。 (3认同)
  • 这对我来说非常有用,不需要以这种方式进行launch.json.我不知道你为什么对你的答案投了一票.+1 (2认同)
  • 这没有用。别名后,每次使用新终端时,我都必须使用`nvm use default`。 (2认同)
  • 在此之前,我必须删除节点的brew安装版本。 (2认同)

Alo*_*mon 37

添加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"
}
Run Code Online (Sandbox Code Playgroud)

  • 我要在项目的根目录中创建“launch.json”文件吗? (2认同)
  • @Kiong 在项目的根目录创建目录“.vscode”,然后在其中创建“launch.json”。 (2认同)
  • 像这样?"runtimeExecutable": [ { "type": "node", "request": "launch", "name": "App", "program": "${workspaceRoot}/index.js", "runtimeExecutable": " ${env:HOME}/.nvm/versions/node/v14.15.4/bin/node" } (2认同)

小智 29

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

这是另一种选择,以防万一这一点没有多大帮助.

  • 工作就像一个魅力:).感谢分享 (5认同)
  • 这应该是公认的答案。我之前在 launch.json 中设置了“runtimeVersion”,但这只是为特定任务设置了节点版本。这适用于整个集成终端实例。谢谢!注意。我必须在 `.zshrc` 中设置 PATH var,因为我使用 zsh 才能工作 (2认同)

ric*_*rdm 26

这里有很多复杂的答案。就我而言,这是由之前安装的 Node 引起的。通过删除以下目录修复它:

rm -rf /usr/local/bin/npm
rm -rf /usr/local/bin/node
Run Code Online (Sandbox Code Playgroud)

然后在 VS Code 中运行nvm use default以获取 nvm 安装的 Node 版本。


Wal*_*rée 22

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

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

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

nvm alias default v12.14.0
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用。当nvm版本为14.16时仍然设置为12.19,接下来将尝试nvm默认方法。 (2认同)
  • 太感谢了!小建议。设置属性已被弃用。就我而言,这有效: "terminal.integrated.defaultProfile.osx": "zsh" (2认同)

小智 18

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

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

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

  • 如果“哪个节点”与cli和vscode不同,这就是您的解决方案! (2认同)

jr.*_*jr. 9

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

您需要先打开命令托盘并选择"安装'代码'到路径中".

在此输入图像描述

然后启动终端并通过nvm选择您的节点,然后启动"代码".

在此输入图像描述

  • 接受的答案没有帮助,但随后在 VSC 中运行“nvm use default”却有帮助。谢谢! (2认同)

rsi*_*imp 9

设置默认别名仅在关闭 VS Code 的所有实例后才对我起作用。简单地重新加载窗口是行不通的。nvm ls将正确显示默认别名设置,但将继续使用首次打开 VS Code 时设置的版本(在所有窗口中)。

还有跨存储库拥有多个节点版本的问题,这正是 nvm 真正要解决的问题。最后,我将以下内容添加到文件底部.zshrc

  [ -s "./.nvmrc" ] && nvm use
Run Code Online (Sandbox Code Playgroud)

本质上,当新的 shell 启动时,它会检查.nvmrc当前目录中是否存在非空目录,如果存在,则使用该版本。如果未安装该版本,您将收到一条消息。运行后,nvm install它应该在所有新的终端会话中正确加载。

正如@asiera指出的那样,您还可以使用 nvm README中显示的目录更改的自动版本切换。尽管项目终端通常始终在与文件相同的目录中打开,但此解决方案稍微简单一些,并且仅在终端启动时运行。.nvmrc


小智 7

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

PATH="/usr/local/bin:$(getconf PATH)"
Run Code Online (Sandbox Code Playgroud)

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

est*_*ani 7

特别是对于 shell,我没有遇到任何问题,但您可能:

我遇到了 vscode 本身的问题,没有解决方案可以帮助我。所以我完成了以下启动脚本的使用。

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

这假设您已经为 bash 配置了它(否则将其更改为您的 shell)并且您想要使用defaultnvm 配置的节点版本(您也可以更改它)。

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

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


nie*_*lsG 7

如果您想为Visual Studio Code NPM 脚本运行程序设置 Node 版本,以下是针对每个项目的工作原理。因此,无需设置全局nvm默认值。

我所说的“NPM 脚本运行程序”是指直接在以下位置中的悬停和执行脚本功能package.json

Visual Studio Code NPM 脚本运行器

一步步

  1. .nvmrc包含项目 Node 版本的文件放入项目的根文件夹中。

  2. 启用自动环境,如下所述: https: //github.com/nvm-sh/nvm#deeper-shell-integration

  3. 打开 VS Codesettings.json并定义您首选的 shell(在我的例子中,它是zsh)。对于自动化配置文件,定义登录交互式shell(参数-l-i)非常重要:

    "terminal.integrated.automationProfile.osx": {
        "path": "/bin/zsh",
        "icon": "play",
        "args": ["-l", "-i"],
    },
    "terminal.integrated.profiles.osx": {
        "bash": null,
        "zsh": {
            "path": "/bin/zsh",
            "icon": "star",
        }
    },
Run Code Online (Sandbox Code Playgroud)

结果

打开新的 shell 会触发 NVM(图标显示哪个设置正在工作):

在此输入图像描述

运行 NPM 脚本会触发 NVM:

在此输入图像描述

在此输入图像描述

干杯!


Cra*_*cks 6

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

$ (nvm use 14; code .)
Run Code Online (Sandbox Code Playgroud)

因此,为了使其对任何项目文件夹透明地工作,请.precode在启动代码之前使用 shell 命令在项目文件夹中创建一个文件 - 例如,

nvm use 14
Run Code Online (Sandbox Code Playgroud)

然后添加到~/.bashrc

$ (nvm use 14; code .)
Run Code Online (Sandbox Code Playgroud)

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

然后,假设必要的文件~/myproject/.precode存在,开始代码

$ code ~/myproject
Run Code Online (Sandbox Code Playgroud)

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

source github/myproject/.precode
Now using node v14.15.1 (npm v6.14.8)
Run Code Online (Sandbox Code Playgroud)

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

nvm use 14
Run Code Online (Sandbox Code Playgroud)


Mon*_*pit 5

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

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

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

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

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

解决方案(对我来说):

我发现,如果我设置"eslint.runtime": "node"settings.json,它现在将使用任何版本node是活跃的,当我使用打开vscodecode .在终端上。只是"node"- 没有路径。


归档时间:

查看次数:

29152 次

最近记录:

6 年,3 月 前