【免费下载链接】nodeterm
Node-based terminal manager for AI coding agents — tmux-backed terminals and parallel agent sessions as draggable nodes on an infinite pan/zoom canvas. macOS, Linux, and a browser Server Edition.
nodeterm 是面向 AI 编码代理(AI coding agents)的 Node 终端管理器:基于 tmux 的终端与并行 agent 会话,都以可拖拽节点的形式铺在无限缩放画布上,支持 macOS、Linux 和浏览器版 Server Edition。本文带你完整走一遍nodeterm 打包与自动更新流程——从 macOS dmg、Linux AppImage/deb/rpm 到 Windows NSIS 安装包,新手也能顺利产出自己的全平台发行版 📦
30 秒看懂 nodeterm 打包工具链
nodeterm 基于 Electron,使用electron-vite构建、electron-builder打包。所有发布配置集中在 package.json 的build字段,所有打包命令定义在scripts中:
| 命令 | 平台 | 产物 | 适用场景 |
|---|---|---|---|
npm run dist | macOS(arm64) | dmg / zip | 本地打包测试 |
npm run dist:linux | Linux(x64) | AppImage / deb / rpm | 本地打包测试 |
npm run dist:win | Windows(x64) | NSIS 安装包 / zip | 本地打包测试 |
npm run release | macOS(arm64 + x64) | dmg / zip | 正式对外发布 |
四条命令遵循同一个套路:先生成图标 → 构建应用 → 交给 electron-builder 出包。其中 npm run dist 会先执行make-icon由 scripts/make-icon.mjs 生成各平台图标,再由 electron-builder 按build.mac/build.linux/build.win配置产出安装包。
两个新手容易忽略的细节:
- 原生模块会自动重编译:
postinstall钩子(package.json)会 patchnode-pty并执行electron-rebuild,确保 node-pty、smart-whisper 等原生依赖匹配 Electron 的 ABI。如果打包报 node-pty 相关错误,先跑npm run rebuild。 - 本地包默认关闭自动更新:所有
dist*命令都注入nodeTermUpdates=disabled元数据(见 src/main/updater.ts 的注释),让本地包不再每 6 小时轮询生产更新源、刷 404 日志;而release命令不加该标记,发布出去的包保留完整自动更新能力。
macOS 一键打包 dmg 与 zip
执行下面一条命令即可在dist/目录得到 macOS 安装包:
npm run dist这条命令(package.json)等价于:
npm run make-icon && npm run build && \ electron-builder --mac --arm64 --publish never \ -c.mac.identity=null -c.mac.notarize=false \ -c.extraMetadata.nodeTermUpdates=disabledmacOS 打包要点(package.json):
- 双架构 + 双格式:
dmg与zip各出 arm64、x64 两份。zip 版是自动更新实际下载使用的格式; - 签名与公证:本地构建通过
identity=null、notarize=false跳过签名;正式release则要求签名 + 公证,否则 macOS 无法静默自更新,只能提示用户手动下载; - 原生模块解包:
asarUnpack将 node-pty、smart-whisper、sharp 等原生模块移出 asar 归档(package.json),保证.node二进制可加载; - 附带二进制:mac 的
extraResources内置了resources/bin/tmux(package.json),这也是“tmux-backed 终端”能开箱即用的原因。
Linux 一次构建 AppImage、deb、rpm 三种发行版
npm run dist:linux按 build.linux 配置,一次运行同时产出AppImage、deb、rpm三种 x64 包,应用分类为Development。产物同样落在dist/目录,文件名形如nodeterm-<version>-x64.AppImage、nodeterm_<version>_amd64.deb、nodeterm-<version>-1.x86_64.rpm。
⚠️自动更新的一个重要差异:electron-updater 在 Linux 上只有 AppImage 能自我替换重启(依赖APPIMAGE环境变量),deb/rpm 安装则降级为「显示 Download 链接、用户手动安装新包」。这一判断在 src/shared/update-platform.ts 中定义,属于有意设计而非缺陷。
Windows NSIS 一键安装包与安全预检
npm run dist:winWindows 配置(build.win):
- oneClick 一键安装:
nsis.oneClick: true、perMachine: false,默认按当前用户安装,产物命名nodeterm-Setup-<版本>.exe(package.json); - 会话宿主随行:
extraResources把 session-host 及其 node-pty 依赖一并打包,供 Windows 上的持久终端会话使用; - 安装预检:build/installer.nsh 覆写了 NSIS 内置的「杀进程」检查,改为运行 scripts/windows-update-preflight.ps1 做进程探测——若 nodeterm 或后台 session host 仍在运行,安装会被安全地阻止并弹出引导,提示用户先在应用内执行Prepare for update(Ctrl+K 或更新卡片),而不是粗暴结束用户正在运行的会话。这是 Windows 端更新安全的核心设计(背景见 docs/windows-session-host.md)。
nodeterm 自动更新机制全解
自动更新由 electron-updater 驱动,核心逻辑在 src/main/updater.ts:
- 启动即检查,此后每 6 小时轮询一次更新源;
- 支持在设置里手动检查,并把
available → progress → downloaded全生命周期转发给渲染层的更新卡片; - 下载完成后弹出系统通知,用户点击「重启并安装」触发
autoUpdater.quitAndInstall()(src/main/updater.ts)。
更新源是一个静态目录,源码见 site/updates/:每次发布把dist/里的latest-mac.yml、dmg/zip 及其.blockmap增量校验文件部署过去,electron-updater 读取 yml 即可发现新版本;官网的下载按钮也会自动跟随该 yml 更新,无需改代码。
为了不在错误场景下误导用户,nodeterm 把更新能力抽象为四种投递模式(src/shared/update-platform.ts):
| 模式 | 含义 | 用户看到什么 |
|---|---|---|
self-install | 有更新源且可自装(macOS、AppImage、已发布的 Windows) | 下载进度 → 重启更新 |
manual-install | 有更新源但不可自装(deb/rpm) | 「有新版 vX.X.X,点击 Download」 |
no-channel | 本构建无更新源(本地dist*包) | 明确告知无更新通道,指向下载页 |
dev | 未打包的开发模式 | 静默返回「已是最新」 |
常见问题快速排查
| 现象 | 原因与解法 |
|---|---|
本地dist*包日志刷latest*.yml 404 | 检查是否漏掉nodeTermUpdates=disabled标记;带标记的包应提示「无更新通道」 |
| macOS 更新后无法静默安装 | 构建未签名/未公证;正式发布需走签名 + 公证流程(release命令) |
| Linux deb/rpm 不自动下载安装 | 设计如此,只能手动下载新包,卡片会给出 Download 链接 |
| Windows 安装程序拒绝继续 | 应用或 session host 正在运行;先在应用内执行 Prepare for update(Ctrl+K) |
| 打包时 node-pty 报错 | 原生模块未针对 Electron ABI 重编译,执行npm run rebuild |
相关资料
- 构建与运行环境说明:CONTRIBUTING.md
- 各版本发布记录:docs/release-notes/
- 更新源目录说明:site/updates/README.md
- 打包脚本:scripts/make-icon.mjs、scripts/release-notes.mjs
掌握上面四条命令与四种更新模式后,你就拥有了 nodeterm 全平台发布与自动更新的完整能力:dist*系列出包、release出正式 macOS 包、更新源目录负责分发,剩下的交给 electron-updater。🚀
【免费下载链接】nodeterm
Node-based terminal manager for AI coding agents — tmux-backed terminals and parallel agent sessions as draggable nodes on an infinite pan/zoom canvas. macOS, Linux, and a browser Server Edition.
相关推荐
Flet 应用 Linux 打包发布全指南:从 `flet build linux` 到 AppImage / .deb / .rpm
Flet 应用 Linux 打包发布全指南:从 flet build linux 到 AppImage / .deb / .rpm 本文基于 Flet 官方文档
前端跨平台桌面应用移动开发QzoneArchive 全平台安装指南:Windows / macOS / Android / Linux(deb、rpm、AppImage、NixOS)一网打尽
QzoneArchive 全平台安装指南:Windows / macOS / Android / Linux(deb、rpm、AppImage、NixOS)一网
桌面应用移动开发网页爬虫rquickshare多平台打包部署实战:从Debian/RPM到AppImage/DMG
rquickshare多平台打包部署实战:从Debian/RPM到AppImage/DMG 想要快速实现跨平台文件分享应用的终极打包部署方案吗?rquicksh
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考