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)
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) - 此解决方案可能不适用于所有人.其他解决方案请参阅以下答案.
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)
小智 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 prefix或nvm use --delete-prefix vx.x.x --silent取消设置.
在我的案例中,我做了解决这个问题的工作是报告的同一问题的"解决方法"部分基本上如下:
之后,当我在两个编辑器上启动任何集成终端时,没有更多的警告,我可以与nvm进行交互,轻松地在任何节点版本之间切换,而不会出现任何问题.
这是另一种选择,以防万一这一点没有多大帮助.
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
提供的一些答案是正确的并且得到了赞成,但有些不完整。这个程序对我有用:
node -v. 你会得到例如v10.12.0。nvm use v12.14.0Cmd+ Shift+p并选择首选项 > 打开设置 (JSON)"terminal.integrated.shellArgs.osx": []到您的用户配置Cmd+ Shift+ p,然后选择Shell命令:安装“码”在PATH命令code. 这将使用新的和更新的/会话打开VS Code。bashzshnode -v. 你会得到v12.14.0。奖励:如果您总是想在VS Code的终端上获得特定的节点版本,请通过在VS Code之外打开终端窗口并运行来将其设置为默认值:
nvm alias default v12.14.0
Run Code Online (Sandbox Code Playgroud)
小智 18
我有同样的问题,但上述答案没有帮助.
显然shellArgs,osx 的默认设置是bash在我使用时设置的zsh.我通过将shellArgs我的用户设置设置为空数组来解决问题:
"terminal.integrated.shellArgs.osx": []
我发现的另一种解决方案是在使用nvm选择节点后从shell中启动代码.
您需要先打开命令托盘并选择"安装'代码'到路径中".
然后启动终端并通过nvm选择您的节点,然后启动"代码".
设置默认别名仅在关闭 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)
特别是对于 shell,我没有遇到任何问题,但您可能:
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"]
},
Run Code Online (Sandbox Code Playgroud)
这假设您已经为 bash 配置了它(否则将其更改为您的 shell)并且您想要使用defaultnvm 配置的节点版本(您也可以更改它)。
注意:“dummy”参数是必需的,以便正确解析其余参数。
“虚拟”的详细解释:Shell 脚本使用位置参数,其中第一个参数将是脚本位置本身(由 寻址$0),当使用-c标志时,脚本将就地读取并且不$0进行设置。vscode 将传递一些参数,例如节点启动脚本位置,这将被错误地解释,因此“dummy”将所有参数推入一处。它可以是任何东西,但它必须存在。
如果您想为Visual Studio Code NPM 脚本运行程序设置 Node 版本,以下是针对每个项目的工作原理。因此,无需设置全局nvm默认值。
我所说的“NPM 脚本运行程序”是指直接在以下位置中的悬停和执行脚本功能package.json:
将.nvmrc包含项目 Node 版本的文件放入项目的根文件夹中。
启用自动环境,如下所述: https: //github.com/nvm-sh/nvm#deeper-shell-integration。
打开 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:
干杯!
我发现在调用代码之前在子 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)
我遇到了同样的问题,我发现了一个奇怪的解决方法,将来可能对其他人有所帮助。
如果我没有设置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 次 |
| 最近记录: |