news 2026/9/26 17:16:57

无需服务器:wterm+just-bash让真实Bash在浏览器终端跑起来的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
无需服务器:wterm+just-bash让真实Bash在浏览器终端跑起来的完整指南

无需服务器:wterm+just-bash让真实Bash在浏览器终端跑起来的完整指南

【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm

wterm 是一款面向 Web 的终端模拟器(A terminal emulator for the web),核心由 Zig 编写并编译为约 26 KB 的 WASM 二进制,渲染到真实 DOM,天然支持文本选中、复制粘贴与无障碍访问。而它的一个特别之处,是与 just-bash 搭配后,不需要任何后端服务器,就能在浏览器里跑起一个可用的 Bash Shell:有彩色提示符、有 Tab 补全、有 Ctrl+R 历史搜索,甚至自带一个虚拟文件系统。🚀

为什么浏览器里需要 Bash?

对于以下场景,"无服务器终端"特别实用:

  • 演示与教学:在网页上展示命令交互效果,观众点击即可上手,无需部署任何后端
  • 文档站点:wterm 的官方文档首页就内嵌了一个可交互终端,访客能直接敲ls、cat试试
  • 轻量沙盒:给应用内嵌一个"看起来像终端"的控制台,输入被纯前端逻辑接管
  • 离线可用:shell 完全跑在浏览器内存中,不依赖网络(默认离线运行)

它是怎么做到无服务器的?

整个方案由两层组成:

组件作用
wtermWeb 终端模拟器:WASM 核心负责解析 ANSI/转义序列,DOM 渲染器负责显示与输入
just-bash纯 JavaScript 实现的 Bash 解释器,命令在浏览器内存中执行
@wterm/just-bash适配器把两者接起来,提供行编辑、补全、历史等 Shell 体验

关键在适配器 BashShell:终端就绪后调用attach(write)接管输出,之后终端的每次按键通过handleInput(data)交给 just-bash 处理,结果直接写回终端——全程没有一个网络请求。

最快上手:三步接入 React 项目

第 1 步:安装依赖

npm install @wterm/dom @wterm/react @wterm/just-bash just-bash

第 2 步:挂载终端

Terminal组件负责显示,onReady回调里创建BashShell并attach,onData回调里把按键转发给handleInput。完整可运行示例见 just-bash 文档:

const shell = new BashShell({ files: { "/home/user/hello.txt": "Hello, world!\n" }, greeting: "Welcome to wterm!", }); shell.attach(write); // 终端就绪后 // onData: shell.handleInput(data)

第 3 步:打开页面,敲命令

ls、cat hello.txt、pwd、cd都能正常工作——它们操作的是一块内存中的虚拟文件系统。✨

仓库里的现成示例:Svelte 浏览器终端

不想从零搭项目?仓库提供了一个开箱即用的示例 examples/svelte/,它在浏览器中运行 just-bash,预置了两个虚拟文件,并带主题切换:

pnpm install pnpm --filter svelte-example dev

启动后打开终端,按提示试试ls、cat README.md或bash hello.sh。预置的虚拟文件定义在 App.svelte 中,greeting会在终端挂载时打印欢迎语。

虚拟文件系统:给 Shell 预置"家目录"

通过files选项传入「路径 → 文件内容」的映射,目录会由路径隐式创建:

new BashShell({ files: { "/home/user/README.md": "# My Project\n\nHello, world!\n", "/home/user/data/config.json": '{ "key": "value" }\n', }, });

之后ls、cat、cd都针对这块虚拟文件系统工作。提示符也会跟随cd自动更新,即使命令以非零状态退出(BashShell 选项说明)。

快捷键:和真 Bash 一样顺手

Shell 内置了完整的行编辑体验(实现见 src/index.ts),常用操作一览:

按键功能
Tab补全文件与命令,支持编辑命令前半段
↑/↓翻历史,并还原未完成的输入与光标位置
Ctrl+R增量搜索历史,回车执行、Esc 编辑、Ctrl+G 恢复原输入
Ctrl+W/Alt+Backspace删除光标前一个单词
Ctrl+U/Ctrl+K删除光标前 / 后的文本
Ctrl+Y恢复被删文本(连续删除可一起恢复)
Ctrl+C/Ctrl+L取消输入 / 清屏

它还支持 Unicode 感知的编辑:emoji 和组合字符会被当作整体移动与删除。

进阶:让浏览器 Shell 联网

默认情况下 shell 完全离线。如需在浏览器内执行curl、fetch等联网命令,可传入network配置开启网络访问(见 just-bash 文档的 Network Access 一节)。

💡 如果你的场景需要真实的系统 Shell(而非 just-bash),仓库还提供了 examples/local/ 示例:Next.js 应用通过 WebSocket 连接node-pty启动本机 PTY,支持多会话标签页——那就需要服务器了,属于另一条路线。

核心文件导航

文件说明
packages/@wterm/just-bash/src/index.tsBashShell 适配器源码
apps/docs/content/docs/just-bash.mdx官方文档:选项、方法、虚拟文件系统、快捷键全表
examples/svelte/无服务器终端完整示例
apps/docs/content/docs/vanilla.mdxVanilla JS / 各框架接入方式

总结

wterm + just-bash 的组合证明了一件事:浏览器里也能有"真"终端体验——DOM 渲染保证原生交互,WASM 核心保证解析性能,just-bash 保证 Shell 语义。三步安装、零后端依赖,把一个小终端搬进你的网页只需十几行代码。🎉

【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 17:16:42

H3导演台显存优化全指南:ComfyUI多模态工作流稳定运行方案

1. 项目概述:这不是一个“调参小技巧”,而是一套针对H3导演台显存瓶颈的系统性破局方案Minimax H3导演台,这个名字在最近三个月的AI视频工作流圈子里几乎成了高频词。它不是单纯的一个模型,而是一整套面向专业级音画同步生成与多模…

作者头像 李华
网站建设 2026/9/26 17:16:15

173张红外图训练YOLO鸟粪检测:小样本目标检测完整流程

简介:面向光伏发电板红外巡检与目标检测场景,这份数据集收录了173张真实红外图像,并针对鸟粪这一典型遮挡物提供了完整标注。图像统一为jpg格式,配套Pascal VOC标准的xml标注文件和YOLO标准的txt标注文件,可直接用于Fa…

作者头像 李华
网站建设 2026/9/26 17:14:55

ASP.NET邮件收发系统毕设指南:SMTP发送与POP3接收协议解析

简介:这是一份基于ASP.NET与C#的C/S架构电子邮件简单收发系统毕业设计资源,面向计算机专业毕业生或正在制作邮件客户端课题的开发人员。系统基于SMTP和POP3协议,整体采用C/S分层结构,完整实现用户注册、邮件单个发送与群发、邮件收…

作者头像 李华
网站建设 2026/9/26 17:14:50

Flink Watermark实战:乱序数据下的事件时间窗口触发与调优

做实时计算的人,迟早都会撞上一个问题:数据明明是按时发生的,到你手里却乱得不成样子。比如业务系统记录了事件发生时间,但经过网络、消息队列、重试机制,到达 Flink 时先后顺序早就打乱了。如果这个时候直接按窗口聚合…

作者头像 李华
网站建设 2026/9/26 17:13:31

ASP商城换壳成核酸查询系统?拆解前后台骨架与安全底线

简介:这套源码包是一份完整的核酸检测报告查询系统ASP项目,面向需要快速搭建或二次开发核酸报告查询功能的Web开发者。系统采用典型的前后端交互结构:前端页面负责收集报告编号与个人信息,并完成基础格式校验;后端ASP脚…

作者头像 李华