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终端
MacBook-Pro-3:QB-Invoice-API mac$ node -v
v6.9.2
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终端
MacBook-Pro-3:QB-Invoice-API mac$ node -v
v6.9.2
Answers:
在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"
}
]}
launch.json
文件在哪里?
解决方法是设置别名default
。在OS终端中运行-
nvm alias default 7.8.0
打开vscode,现在运行node -v
返回7.8.0
似乎vscode占用了此(别名默认值)值,而不是由设置的节点版本 nvm use X.X.X
重新启动VS代码以获取更改。
更新(12/04/2018) -此解决方案可能不适用于每个人。请参阅以下答案以了解其他解决方案。
nvm use default
每次使用新终端时我都必须使用
nvm use default
。
像这样添加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"
}
launch.json
在项目的根目录中创建文件?
我遇到了同样的问题,即不仅无法通过VSCode,而且无法通过Atom Editor(使用platformio-ide-terminal软件包在其中管理集成终端)在OS X环境中通过nvm来指定节点版本。以前的答案中的任何建议都对我没有用,除了我不使用调试器,而是对特定任务使用gulp和grunt。显然,至少在这些编辑器中,nvm不会与集成终端或子外壳相处,因为在加载它们时,环境变量$ PATH在内部进行了修改,并且根据此软件包的其中一位撰稿人在本期报道中的评论进行了以下操作此处NVM无法在嵌套shell#1652中加载:
“ @charsleysa,我知道nvm为什么会引发此错误。在您的子shell中,您路径的/ usr / local / bin:/ usr / bin:/ bin:/ usr / sbin:/ sbin部分已经从末尾移出路径的起点。
- 然后启动nvm时,它将调用nvm_change_path(我的贡献从nvm_prepend_path更改为nvm_change_path),这将修改路径中与nvm相关的部分。
- 然后,Nvm通过询问npm是什么来检查当前npm前缀。由于/ usr / local / bin / npm现在具有优先权,因此它将报告/ usr / local / bin。
- 然后,Nvm检查npm报告的当前前缀是否在当前nvm节点版本的目录树中(在此阶段,默认nvm别名解析为该节点版本的安装目录)。
- 前缀不是该树的一部分,因此它会自行停用(在进程中调用nvm_strip_path,这就是为什么子外壳程序的PATH中没有与nvm相关的路径的原因),并因收到的错误而失败。macOS的/ etc / profile(或/ etc / zprofile)调用/ usr / libexec / path_helper,它执行PATH切换。
在父外壳程序中,PATH中还没有nvm目录,因此在nvm运行时,它将目录放置在路径之前。但是在子外壳中,macOS重新配置了PATH,以将所有非系统目录放在最后,因此我们遇到了问题。”
启动任何集成终端时,我总是收到以下消息:
nvm与npm config的“前缀”选项不兼容:当前设置为“ / usr / local”运行npm config delete prefix
或nvm use --delete-prefix vx.x.x --silent
取消设置。
在我的案例中,我要解决的问题是所报告的同一问题的“替代方法”部分,基本上是以下内容:
之后,当我在两个编辑器上都启动任何集成终端时,便不再发出警告,并且可以与nvm进行交互,从而轻松地在任何节点版本之间切换,并且完全没有问题。
在这里,这是另一种选择,以防万一它没有太大帮助。
runtimeVersion
在launch.json中设置in,但仅设置了特定任务的节点版本。这适用于整个集成终端实例。谢谢!注意 我必须设置PATH.zshrc
我遇到了同样的问题,但是上述答案没有帮助。
显然,默认shellArgs
的OSX被设置为bash
当我使用zsh
。我通过将shellArgs
用户设置中的设置为空数组解决了该问题:
"terminal.integrated.shellArgs.osx": []
which node
与cli和vscode不同,这是您的解决方案!🚀
我正在使用oh-my-zsh,它也没有使用nvm指定的节点版本。尝试了一些在此处发布的建议,但我设法解决此问题的唯一方法是将以下行添加到~/.zshrc
PATH="/usr/local/bin:$(getconf PATH)"
提供的一些答案是正确的,但有些不完整。此过程对我有用:
node -v
。你会得到例如v10.12.0
。nvm use v12.14.0
Cmd
+ Shift
+p
并选择“首选项”>“打开设置(JSON)”"terminal.integrated.shellArgs.osx": []
到您的用户配置Cmd
+ Shift
+p
并选择Shell命令:在PATH中安装“代码”命令code
。这将打开VS代码与新的和更新bash
/zsh
会话。node -v
。你会得到v12.14.0
。奖励:如果您始终想在VS Code的终端上获取特定的节点版本,请通过在VS Code外部打开终端窗口并运行来将其设置为默认版本:
nvm alias default v12.14.0
我尝试了所有建议的解决方案,但没有任何效果。
/ usr / local / bin / node指向某个地方。我建立了到特定nvm节点文件夹的符号链接,这为我解决了这个问题:
ln -s /Users/mad/.nvm/versions/node/v11.1.0/bin/node /usr/local/bin/node
特别是对于外壳,我没有任何问题,但是您可以:
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),并且您要使用default
nvm所配置的节点版本(也可以对其进行更改)。
注意:“ dummy”参数是必需的,因此可以正确解析其余参数。
关于“虚拟”的更详细的解释:Shell脚本使用位置参数,其中第一个将是脚本位置本身(由寻址$0
),当使用-c
标志就地读取脚本时,则不会$0
设置。vscode将传递一些参数,例如节点启动脚本的位置将被错误地解释,因此“虚拟”将所有参数推送到一个位置。它可以是任何东西,但必须存在。
我遇到了同样的问题,并且发现了一个奇怪的解决方法,该解决方法将来可能会对其他人有所帮助。
如果未设置,则eslint.runtime
系统正在运行v10.11.0
eslint服务器的节点,而我希望它运行v12.13.0
已安装并通过设置为默认值的节点nvm
。
我发现节点的v10版本是brew
根据@franziga的回答安装的,而我所需的节点版本是由安装的nvm
。因此,我v10.11.0
通过brew卸载并关闭/重新打开VS Code。奇怪的是,eslint仍在报告它已开始使用v10。
我尝试在没有任何PATH
启动脚本的情况下对我的shell进行任何更改,并且节点的版本仍按预期正确指向v12,但是VS代码仍然为eslint启动了v10。
我不确定如何检查eslint正在运行的可执行文件的路径,如果我打开集成终端,则可以在节点(v12)的预期版本中正常运行。
我发现如果"eslint.runtime": "node"
在settings.json
其中进行设置,那么在终端上node
使用vscode打开时,它将使用激活的任何版本code .
。只是"node"
-没有路。
您无需修改默认节点版本。以下示例假定节点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
因此,您的nvm配置良好,但是其他版本的节点STILL仍在接管吗?
删除节点的所有非nvm版本:
brew uninstall --force node
(没有系统节点,纱线会很好)注意:安装/升级纱线时,请使用 brew install yarn --without-node
brew
来安装节点。它具有本地安装程序! nodejs.org/en/download
brew
对于不需要的人来说,使用install节点非常好,nvm
并且比本机安装程序具有优势。
没有其他解决方案对我有用。
所以我跑了nvm alias default node
,这为我解决了。
nvm alias default node
设置已安装的节点的“当前”版本,而不是所需的特定版本。