npm 是使用 nvm 安装的,但 IntelliJ 不知道它

Posted

技术标签:

【中文标题】npm 是使用 nvm 安装的,但 IntelliJ 不知道它【英文标题】:npm is installed using nvm but IntelliJ does not know about it 【发布时间】:2017-03-07 19:43:15 【问题描述】:

我使用 NVM 安装了 NPM。

当我在 Intellij 终端中使用 npm 时,它说我没有安装 NPM。但是如果我使用 Ubuntu 终端,它就可以工作。

这是我尝试过的:

我已经尝试设置我的节点解释器(在“语言和框架”>“节点和 NPM”中,设置为~/.nvm/versions/node/v6.8.0/bin/node)。

我也已经启用了 Node.js 核心库。那里显示包含 npm 包。

但是 IntelliJ 终端仍然抱怨我没有安装 npm。为什么?

【问题讨论】:

【参考方案1】:

因为idea终端默认启动了一个登录shell,所以.bashrc文件没有被读取。

解决问题:

在 IntelliJ 中打开“设置”。然后,在左侧面板中展开“工具”,然后单击“终端”。

将 -i 添加到 Shell 路径。 (例如/bin/bash -i)

【讨论】:

这是否适用于较新版本的 IntelliJ IDEA? 添加后,我必须关闭并重新打开 IntelliJ 才能使其正常工作。我正在使用最新的 IntelliJ。 这也使用 zsh 为我解决了这个问题:/bin/zsh -i【参考方案2】:

这为我解决了问题:

NVM 仅在终端启动时修补环境变量。如果 IDE 从终端启动,它会继承终端环境(包括修改的 PATH 环境变量,添加 NVM_DIR 环境变量等)。在这种情况下,使用 node/npm 通常没有问题,因为 Idea 看到了正确的 PATH 值。 对于 bash 作为 shell,解决方法可能如下:编辑您的 Idea 启动器并将命令设置为“/bin/bash -l -c”/path/to/idea.sh”。此命令将执行 bash 登录(即读取您的.bashrc/.bash_profile 文件)然后运行idea

https://intellij-support.jetbrains.com/hc/en-us/community/posts/205964744/comments/205060164

只需编辑您的 Intellij 启动器/启动脚本并将其更改为 /bin/bash -i -c <path to idea.sh>

【讨论】:

我们如何找到ide.sh的路径? 检查启动器快捷方式的属性。您可以在/usr/share/applications(用于全局安装)或~/.local/share/applications(用于本地安装)中找到启动器 曾在 phpstorm 2020.1 和 Kubuntu 上工作。谢谢@蒂姆【参考方案3】:
ln -s "$(which node)" /usr/local/bin/node

该命令将从您安装的当前节点版本创建符号链接。如果已经有 /usr/local/bin/node 文件,请删除它,因为它可能是一个损坏的链接。

还将编辑配置中的任何项目版本更改为“节点”(这将是使用上述命令创建的链接)

【讨论】:

简单有效,谢谢兄弟。干得好! 谢谢我已经为这个问题苦苦挣扎了几个星期【参考方案4】:

我在 Ubuntu 上运行,遇到了同样的问题,无法从 IntelliJ Idea 终端运行节点或无法运行启动 nvm 相关进程的 gradle 任务。

在 Idea 中使用终端时,一些现有答案为我修复了它,但运行 gradle 任务仍然无法正常工作。用 bash -l -c... 启动它,在其他地方找到的也不起作用。

最初通过创建一个与 nvm 执行相同操作的启动脚本来解决它,然后执行 bash -l -c... 并且有效,但发现(之后)上述 -i 有效也更简单......所以我的 .desktop exec 输入行现在是:

Exec=/bin/bash -i -c /opt/intellij/idea-IU/bin/idea.sh "%f"

这里只是提到它,因为接受的解决方案不适用于从 Idea 中启动与 nvm 相关的 gradle 任务。

【讨论】:

【参考方案5】:

添加 nvm 节点解释器对我有用:

设置 -> 语言和框架 -> Node.js 和 NPM -> 节点解释器

选择~/.nvm/current/bin/node。如果它没有显示在解释器选择中,请单击 ... 并将其添加为新路径。

【讨论】:

【参考方案6】:

对我来说,解决方案是将以下几行从 ~/.bashrc 移动到 ~/.profile 并重新启动/重新登录。

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

【讨论】:

【参考方案7】:

如果您以管理员身份运行 IntelliJ 会有帮助吗?在 Windows 上,这解决了我在设置 Node、Bower 和 Git 时遇到的许多问题

【讨论】:

不幸的是,它不起作用。我做了 gksudo -k -u root "/opt/idea-IU-162.2032.8/bin/idea.sh" %f 以 root 身份运行 IntellIjJ,我在里面尝试了 node --version ,但它仍然没有显示任何事物。无论如何感谢您的帮助。【参考方案8】:

正如 Elena Pogorelova 在Jetbrains forums 中指出的那样,IDE 在使用 NVM 时找不到 Node 脚本的原因是:

从桌面/系统菜单启动时,IDE 只能看到在 ~/.profile(登录 shell)中配置的环境变量,而不是在交互式 shell 配置文件中(如 ~/.bashhrc)。

所以,我发现最好的解决方案是将 NVM 初始化指令从 ~/.bashrc 文件移动到 ~/.profile,然后重新启动。在我的情况下是:

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

【讨论】:

【参考方案9】:

问题在于您的环境与运行 intellij 以及您运行的 bash 会话不同nvm <command (install/use)>。添加 nvm 建议添加到您的 ~/.bashrc 的行通常是一个好主意,这会将所需的环境变量导出到您的每个 bash 会话中。如果您可以从 bash 运行 node --version 并打印 v6.8.0,那么您的环境是正确的,您只需要从该上下文中运行 intellij,我个人不是 IDE 的粉丝,所以我不知道确切,但我想象一下 intellij 有一种从命令行执行的方法。

【讨论】:

如果你的意思是这行代码,export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && 。 "$NVM_DIR/nvm.sh" ,它已经被添加并且我做了 source ~/.bashrc 但它输出的是来自 /usr/bin/node --version 的 v4.2.6,而不是安装的 v6.8.0 nvm,这意味着它不能解决问题 @RaymondPang 好的,那么您可能只需要从命令行运行 intellij,以便这些环境变量在 intellij 的环境中。 @RaymondPang Christian 是对的,你的问题是 NVM 的环境变量没有被传递给 intellij,因为它不是 bash 的子进程。有关详细信息,请参阅linuxcourse.rutgers.edu/rute/node12.html 第 9.9 节 @Christian Grabowski 我在终端中输入了 /opt/idea-IU-162.2032.8/bin/idea.sh 以启动 IntelliJ,这正是您所说的“从命令行运行”的意思吗?在那之后,我仍然无法在 intelliJ 中获得相同的环境变量和 Node。【参考方案10】:

我遇到了同样的问题,并通过指向 /usr/local/bin/bash 而不是 /bin/bash 来修复它

【讨论】:

【参考方案11】:

我在 mac OS catalina 中遇到了同样的问题,通过在 Preferences -> Tools -> Terminal -> Application Settings 中将 Shell 路径更新为 /bin/zsh 来修复它。

【讨论】:

【参考方案12】:

在 Windows 上,这对我有用...

【讨论】:

【参考方案13】:

我在 mac 上使用 webstorm,必须将路径变量添加到 ~/.zshenv(这是 ~/.bash_profile 的 zsh 版本):

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

【讨论】:

以上是关于npm 是使用 nvm 安装的,但 IntelliJ 不知道它的主要内容,如果未能解决你的问题,请参考以下文章

安装 nvm 后无法卸载全局 npm 包

设置 nvm 以正确使用 npm 和 grunt

windows使用nvm安装nodejs后升级npm报错

NVM 全局模块文件夹

ubuntu下nvm,node以及npm的安装与使用

NVM:npm install -g 一直使用错误的节点版本