当前位置: 首页 > news >正文

fish安装node.js环境

为什么强调fish shell,因为fish shell的缘故,不能直接执行node.js官网的命令

好的,您遇到了一个非常典型且重要的问题。请仔细阅读我的分析,这能帮您彻底解决问题。

问题诊断

您看到的所有错误,归根结底有两个核心原因:

  1. 您正在使用 Fish Shell:从命令行末尾的 fish: 提示可以看出,您使用的不是 Linux 默认的 bash,而是 fish。Fish Shell 的脚本语法与 bash 不兼容
  2. 错误的加载方式nvm 的标准安装脚本和您执行的加载命令 \. "$HOME/.nvm/nvm.sh" 都是为 bashzsh 设计的。当 Fish 尝试去读取 nvm.sh这个 bash 脚本时,它无法理解其中的语法(比如错误信息里的 Unexpected ')' found),因此加载失败。

加载失败的直接后果就是,nvm 命令在您的 Shell 中根本不存在,所以系统会提示 nvm: command not found

请不要按照系统的建议去用 sudo zypper install nodejs-common,那会绕开我们想要使用的 nvm,导致版本管理混乱。

根本的解决方法

我们需要用“Fish 的方式”来安装和使用 nvm。最推荐的方法是使用一个名为 nvm.fish 的包装器(wrapper),它能让 nvm 完美地在 Fish Shell 中工作。

请按照以下步骤操作,这将一劳永逸地解决您的问题。


操作步骤

第一步:彻底清理旧的、不完整的安装

我们必须先删除之前错误的安装留下的痕迹。

在您的终端里执行以下命令,彻底删除 .nvm 目录:

rm -rf ~/.nvm

然后,检查一下 .bashrc 文件,确保里面没有 nvm 相关的代码(根据日志,它可能被添加过)。

# 这个命令会打开文件,检查并删除包含 "NVM_DIR" 的行,然后保存退出
# 如果您不熟悉 vim,也可以用图形界面的文本编辑器打开 /home/yqh/.bashrc
vim ~/.bashrc 

(进入 vim 后,找到相关行,按 dd 删除,然后按 :wq 保存退出)

第二步:为 Fish 安装插件管理器 fisher

fisher 是 Fish Shell 最流行的插件管理器。如果还没有安装,请用下面这个命令安装:

curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
第三步:使用 fisher 安装 nvm.fish

这是最关键的一步。执行以下命令来安装 nvm 的 Fish 包装器:

fisher install jorgebucaran/nvm.fish

安装完成后,请重启您的终端,或者新开一个终端窗口,以确保配置完全生效。

第四步:安装并使用 Node.js

现在,您的 nvm 已经准备就绪,可以正常使用了!

  1. 安装 Node.js v22:

    nvm install 22
    

    您会看到一个下载和安装的进度条。

  2. 验证安装:

    node -v
    npm -v
    nvm current
    

    这次,您应该能看到正确的版本号输出,不再有任何 command not found 的错误。

现在,您的开发环境已经按照最适合 Fish Shell 的方式搭建完毕了。

相关文章:

  • Spring Boot 性能优化与最佳实践
  • [论文阅读] 人工智能 | 机器学习系统构思新方法:Define-ML 解决传统 ideation 痛点
  • RabbitMQ 消费幂等性与消息重放实现
  • 车联网网络安全渗透测试:深度解析与实践
  • 机器学习中为什么要用混合精度训练
  • 学习设计模式《十五》——模板方法模式
  • sql server 将nvarchar长度设置成max有什么隐患
  • 2025暑期学习计划​参考
  • 【C语言】知识总结·指针篇
  • 鸿蒙 List 组件解析:从基础列表到高性能界面开发指南
  • TCP/IP协议简要概述
  • 大彩讲堂:基于VisualTFT软件如何调节电容屏触摸灵敏度
  • 【Pandas】pandas DataFrame last_valid_index
  • PHP语法基础篇(六):数组
  • 【Docker管理工具】安装Docker容器自动更新工具Watchtower
  • HTTP协议中Connection: Keep-Alive和Keep-Alive: timeout=60, max=100的作用
  • vue项目中纯前端实现导出pdf文件,不需要后端处理。
  • 探索相机成像的奥秘 - 齐次坐标、径向失真和图像传感器倾斜
  • ROS:录制相机、IMU、GNSS等设备数据
  • 扫地机产品认证--黑名单制裁公司能否拿到美国产品准入许可(FCC认证)