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
答案 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 prefix
或nvm use --delete-prefix vx.x.x --silent
取消设置。
在我的案例中,我为解决这个问题所采取的措施是&#34;解决方法&#34;报告的同一问题的一部分基本上如下:
之后,当我在两个编辑器上启动任何集成终端时,没有更多的警告,我可以与nvm进行交互,轻松地在任何节点版本之间切换,而不会出现任何问题。
这是another替代,以防这个没有那么多帮助。
答案 4 :(得分:11)
我遇到了同样的问题,但是上面的答案没有帮助。
显然,当我使用shellArgs
时,osx的默认bash
设置为zsh
。我通过将用户设置中的shellArgs
设置为一个空数组来解决了这个问题:
"terminal.integrated.shellArgs.osx": []
答案 5 :(得分:10)
提供的某些答案是正确的,但有些不完整。此过程对我有用:
node -v
。例如,您将获得v10.12.0
。nvm use v12.14.0
+ Cmd
+ Shift
并选择首选项>打开设置(JSON) p
添加到您的用户配置"terminal.integrated.shellArgs.osx": []
+ Cmd
+ Shift
并选择 Shell命令:在PATH中安装“代码”命令 p
。这将使用新的和更新的code
/ bash
会话打开 VS Code 。zsh
。您会得到node -v
。奖金: :如果您始终 希望在 VS Code 的终端上获取特定的节点版本,通过打开终端窗口 外部 VS Code 并运行以下命令将其设置为默认值:
v12.14.0
答案 6 :(得分:8)
我发现的替代解决方案是在使用nvm选择节点后从shell中启动代码。
您需要先打开命令托盘并选择&#34;安装代码&#39;成 路径&#34;
然后启动终端并通过nvm选择您的节点,然后启动&#34;代码&#34;。
答案 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)"
答案 13 :(得分:0)
检查您的 MAC 上的默认交互式 shell。 如果是zsh,那么VS Code 中的终端也设置为zsh 模式怎么样?然后就可以在Mac上使用指定的node版本了。这对我有用。
答案 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 终端中:
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版本的节点:
brew uninstall --force node
(如果没有系统节点,则纱线会很好)注意:安装/升级纱线时,请使用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)
特别是对于外壳,我没有任何问题,但是您可以:
terminal.integrated.env.<platform>
我对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)
我遇到了同样的问题,发现node
和brew
安装了nvm
。我卸载了node
安装的brew
,现在终端和Visual Studio代码上的版本都相同。