在 Ubuntu 24.04 LST 上安装 Node.js 24

作者:Mapleay日期:2026/9/22

nvm 没有安装成功(或没有加载到当前 shell)。这说明之前的安装脚本没生效,或者 ~/.bashrc 没有被正确加载。

请按顺序执行下面的步骤。

🛠️ 方案一:用 NodeSource 直接安装 Node.js 24(更简单)

如果不想折腾 nvm,直接用系统包管理器安装最省事:

1# 1. 添加 NodeSource 仓库
2curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
3
4# 2. 安装 Node.js
5sudo apt install -y nodejs
6
7# 3. 验证
8node -v

预期输出:v24.x.x

这种方法会把系统的 node 直接替换成 v24,不需要配置 PATH,也不会出现“换了 shell 就丢失”的问题。

🛠️ 方案二:重新安装 nvm

如果你想用 nvm 管理多个 Node 版本,可以手动安装:

1. 下载安装脚本

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

2. 手动加载 nvm(关键一步)

安装脚本通常会把 nvm 的初始化写入 ~/.bashrc,但当前终端不会自动加载。你需要立即手动加载:

1export NVM_DIR="$HOME/.nvm"
2[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

3. 验证 nvm 可用

nvm --version

如果能输出版本号,说明 nvm 已经生效。

4. 安装并使用 Node.js 24

1nvm install 24
2nvm use 24
3nvm alias default 24
4node -v

⚠️ 安装完 nvm 后

nvm 只在当前 shell 有效。新开终端会自动加载 ~/.bashrc,一般没问题。如果新终端里 nvm 还是找不到,检查 ~/.bashrc 末尾是否有这几行(没有就手动加上):

1export NVM_DIR="$HOME/.nvm"
2[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
3[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

✅ 升级完成后

确认 node -v 输出 v24.x.x 后,再回到项目目录重装依赖:

1cd ~/deepseek-harness
2rm -rf node_modules
3pnpm install

💡 建议

如果你的目标是尽快把项目跑起来,推荐用方案一(NodeSource),路径最短、最不容易出错。如果之后需要频繁切换 Node 版本,再考虑 nvm。

先跑 node -v,如果已经是 v24,直接 pnpm install 即可。

验证结果

方案1 和 方案2 都能成功地在 Ubuntu 24.04.3 LTS 上安装。2026年9月18日20:07:44。

nvm 的实际应用

在 Ubuntu 上安装 deepseek-harness

安装方式1 - Run from npm

Install Node.js, then run:

npx @deepseek-ai/dsh web

The command starts the Web UI at http://127.0.0.1:3080 by default and opens it in the default browser for a local launch. An SSH launch only prints the host URL because the SSH client or editor owns the local forwarded address. Pass --no-open to run the server without opening a browser. See Web UI guide.

安装方式2 - Run from source

To run from a repository checkout:

1git clone https://github.com/deepseek-ai/deepseek-harness.git
2cd deepseek-harness
3pnpm install
4pnpm run build
5pnpm dsh web

pnpm run build prepares the repository artifacts. pnpm dsh web uses those built artifacts without rebuilding.

这种安装过程,需要先安装好 nvm 在安装好 Node.js 24 才能用 pnpm 工具。

在 Windows host 上访问 VMware 上的 Ubuntu 里的 deepseek-harness 服务

1. 在 Ubuntu VMware 上开启 deepseek-harness 服务:
maple@KICKPI-RK3576:~/deepseek-harness$ pnpm dsh web

2. 在本地终端建立如下关联:
ssh -L 3080:127.0.0.1:3080 用户名@虚拟机IP
ssh -L 3080:127.0.0.1:3080 maple@192.168.116.144
保持 SSH 连接,从 Ubuntu 的 pnpm dsh web 动态输出信息中,找出链接网址:

1maple@KICKPI-RK3576:~/deepseek-harness$ pnpm dsh web
2$ node --import tsx/esm apps/cli/src/bin.ts web
3dsh web: http://127.0.0.1:3080/?token=mAhh5NCrvv7-pCQye4bHaPMkZysHZjYVCVpWAiAKQFk
4dsh web: opening the default browser; pass --no-open to disable
5

然后在宿主机浏览器访问:
http://127.0.0.1:3080/?token=xxxxx,即:

1#  Windows 主机浏览器中输入网址:(验证OK 2026年9月18日20:44:56)
2http://127.0.0.1:3080/?token=mAhh5NCrvv7-pCQye4bHaPMkZysHZjYVCVpWAiAKQFk
3

这样就把宿主机的 3080 转发到了虚拟机的 127.0.0.1:3080。
注意:这种方式建立的关联不是永久的。 SSH 端口转发是会话级的,只在 SSH 连接存活期间有效。
一旦 SSH 连接断开(关掉终端、网络中断、虚拟机重启等),转发就会立即失效,宿主机上的 http://127.0.0.1:3080/ 也会无法访问。

3. 在 Windows 主机的 CodeArts/VScode 终端内,同理:

1maple@KICKPI-RK3576:~$  cd deepseek-harness/
2maple@KICKPI-RK3576:~/deepseek-harness$ pnpm dsh web
3$ node --import tsx/esm apps/cli/src/bin.ts web
4dsh web: http://127.0.0.1:3080/?token=Hu0q3eHlquwjqRC-WrC3tlOMWlo6bSM-HeEGUFQbojE

4. DSH - DeepSeek Harness 插件

还有一种方法更加直接,也就是 Windows 主机的 CodeArts/VScode 商店里的 deepseek-harness 插件本身就支持本地和远程两种模式去链接 deepseek-harness 服务:

DSH - DeepSeek Harness

  • 连接管理:本地 / 远程双模式,状态栏实时显示连接状态;事件流断线自动重连。
    • 本地模式(默认):配置 dsh.localServerPath 后自动拉起 dsh web 并连接(若 3080 端口已有 DSH 实例在运行则直接复用,不重复拉起);也可直接连默认 http://127.0.0.1:3080
    • 远程模式:开启 dsh.remote 并填入 DSH 启动 token(dsh.token),扩展自动换取会话 cookie 认证,改配置自动重连。

实际上也是可以用的:

保证远程模式下每次手动填写 网址里的 token 密钥


在 Ubuntu 24.04 LST 上安装 Node.js 24》 是转载文章,点击查看原文


相关推荐


Node 开发者也有自己的轻量工作流引擎了:npm i 一行,5 分钟跑通一条审批流
mldong2026/9/14

一、搜"node 工作流引擎",你会先搜到什么 场景很常见:一个 Node / TypeScript 服务(中台、内部系统、全栈应用),产品说要加审批流。请假、报销、采购,单子从申请人出发走到部门领导,复杂一点的要会签、按比例通过、退回发起人改材料、抄送一把手。 你去搜 node workflow,会搜到 n8n(可视化工作流自动化平台)、BullMQ(Redis 任务队列),再往外还有 Temporal、Camunda 的 Node 客户端。这些名字都很强,但花一个下午读下来你会发现,它们的主


Codex 太能吃 Token?给它配个 GPT 军师!
潘高2026/9/6

用 Codex 最怕什么? 活还没干完呢,Token 先没了。 加个按钮,先分析;补个条件,再分析;临时改主意,推倒重来。按钮还没露面,方案倒是先出了三版。 再看看旁边的 ChatGPT 网页,明明还有可用额度,却在陪你闲聊“今晚吃什么”。 能不能让它也来搭把手? 这就是我做 Chat2Codex 的念头。一句话: ChatGPT 当军师,Codex 干实事。 一个摇羽扇,一个敲键盘 军师负责捋需求、想方案、拆步骤;Codex 负责进项目、读代码、改文件、跑测试。结果带回来,再看看下一步怎么


Eino ADK——Agent 的完整生命周期:从创建到中断恢复(第98篇-E84)
leeyi2026/8/29

上一篇 讲了数据库迁移怎么不翻车。但 Agent 本身是怎么跑起来的?创建、执行、工具调用、中断、恢复——这些生命周期节点 Eino ADK 怎么管? 这篇拆解 Eino ADK(Agent Development Kit)的 Agent 完整生命周期。从 NewChatModelAgent 到 Runner.Run,从 ReAct 循环到 Interrupt/Resume。源码在 eino/adk/ 下,核心文件四个:interface.go、chatmodel.go、runner.go、fl


Rust 泛型 Generics详解:编写可复用且类型安全的代码
程序员爱钓鱼2026/8/21

《Rust编程实战》系列第47篇 上一篇文章中,我们学习了Rust的Trait Object,了解了dyn Trait、Box<dyn Trait>以及动态分发。本篇继续学习Rust类型系统中另一项非常核心的能力: Generics 中文通常称为“泛型”。 泛型解决的问题可以简单理解为: 在不知道具体类型的情况下,编写可以复用于多种类型的代码。 假设我们需要分别查找i32、f64中的最大值,如果不用泛型,可能会写: fn max_i32(a: i32, b: i32) -> i32 {


数字孪生3D可视化有哪些?主流实时渲染平台深度测评
anxiao_m2026/8/7

随着产业数字化推进,数字孪生3D可视化逐步落地智能制造、智慧城市、园区管控等场景。不少项目负责人在选型阶段产生困惑:市面上可用的数字孪生3D可视化方案分为哪些类型,搭载实时渲染能力的服务商又该如何筛选。 本文结合行业通用评估维度,梳理主流解决方案,对比各方案适配场景,帮助需求方避开选型误区,找到匹配自身项目的可视化底座。 一、数字孪生3D可视化方案评测标准 本次榜单排序依据五项核心维度综合打分,每项标准具备明确选型参考价值: 实时渲染性能:决定大体量三维模型能否流畅交互,是区分静态沙


玻尔兹曼机光谱数据处理实战:细菌拉曼光谱上的RBM少标签分类
nnerddboy2026/7/29

本文是一篇“光谱数据处理 + 受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)”的实战讲解稿。它不重新运行你的脚本,而是基于你提供的真实结果文件、脚本和 5 张图,把整条链路从零讲清楚:数据是什么、为什么要这样预处理、RBM 到底学到了什么、少标签实验为什么这样设计、每张图应该怎么读、结果说明了什么、如果自己动手复现要注意什么。完整代码在文末 0.前言 这个案例解决的是一个非常典型、也非常实际的问题:光谱很多,标签很少。 你手里的数据是真实单细胞


【线性代数】图形学基础:齐次坐标与矩阵变换
h_a_o777oah2026/7/21

计算机图形学涉及很多知识,比如线性代数和微积分等等。在学习图形学知识前,我们应该要对这些基础知识有一个了解。下面介绍一下相关的基础线性代数知识。 首先我们要知道,线性代数中的矩阵是可以变换坐标系里点的位置的。而比如  和  分别表示二维或者三维空间中点或者向量的坐标,也可以写成  或者  。如果有对于矩阵乘法不理解的,可以查看我此前的一个矩阵快速幂博客,其中有一段是对于矩阵乘法的解析。链接:【算法详解】矩阵快速幂:如何将线性方程组映射为转移矩阵解决线性递推-CSDN博客 齐次坐标 我们知道


LeetCode 150. 逆波兰表达式求值
Best_Jerry2026/7/13

leetcode.cn/problems/ev… programmercarl.com/0150.%E9%80… 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 '+'、'-'、'*' 和 '/' 。 每个操作数(运算对象)都可以是一个整数或者另一个表达式。 两个整数之间的除法总是 向零截断 。 表达式中不含除零运算。 输入是一个根据逆波兰表示法表示的算术表达式。 答案及所有中间计算结果可


【系统架构设计师】论文篇
忻州人在郑州2026/7/5

文章目录 前言总体方向浅谈论文要求及准备方法如何找项目具体论文各部分准备通用摘要模板通用项目背景与本人职责通用点题句中间段1. 论微服务架构及其应用2. 论云原生架构及其应用3. 论大数据架构及其应用4. 论系统架构评估5. 论软件测试方法及应用6. 论需求分析方法及应用7. 论软件开发模型及应用8. 负载均衡9. 事件驱动架构 万能句1. 需求与变更控制2. 敏捷开发3. 测试保障4. 运维治理 通用结尾 参考资料 前言 ​ 本系列文章为软考系统架构设计师笔记


Flutter版本选择指南:3.44系列继续观望 | 2026年6月
程序员老刘2026/6/27

大家好,我是老刘 每次Flutter发新版本,群里总有人问:"老刘,3.44.3出来了,我能升了吗?" 我的回答永远不变:再等等。 不是我不信任Google的修复速度。事实上,3.44系列这一个月发三个补丁,节奏还算克制。但是,补丁版本的稳定不等于生产环境的可靠,尤其是3.44这一版动了SwiftPM和Android底层架构,第三方插件的适配进度至今没有一个明确的说法。 今天这篇,我把6月所有版本状态、修复内容和选择策略一次性讲清楚,帮你做出不后悔的决定。 一、6月Flutter大事件 Flu

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读