news 2026/9/27 0:11:21

如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程

如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程

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

wterm 是一款面向浏览器的 Web 终端模拟器(terminal emulator for the web),核心用 Zig 编写并编译为约 26 KB 的 WASM,配合 React 组件可在几分钟内给任意 React 项目加上一个支持文本选择、复制粘贴、24 位颜色与主题切换的完整终端。本文将带你走通安装、接入和输入控制的完整流程,零后端即可先跑起来。

wterm 是什么?为什么值得用

与传统基于 Canvas 的方案不同,wterm 直接渲染到 DOM,带来几个天然优势:

  • 🖱️原生交互:文字选择、复制粘贴、浏览器查找、读屏器无障碍直接可用
  • 🚀高性能:Zig + WASM 核心,脏行追踪(dirty-row tracking)只重绘变化的行
  • 🎨内置主题:Default、Solarized Dark、Monokai、Light,支持 CSS 变量自定义
  • 🧩多框架绑定:官方提供 React、Vue 3、Svelte 组件
  • 🔗完整 VT 支持:VT100/VT220/xterm 转义序列、OSC 8 超链接、宽字符(CJK/emoji)、备用屏幕(vim、htop 等 TUI 程序可正常工作)

各包职责一目了然(完整说明见 README.md):

包名用途
@wterm/core无头 WASM 桥接 + WebSocket 传输
@wterm/domDOM 渲染器,原生 JS 终端
@wterm/reactReact 组件 +useTerminalhook
@wterm/just-bash纯浏览器内运行的 Bash 壳

第 1 步:安装 React 终端依赖(约 30 秒)

在 React 项目根目录执行:

npm install @wterm/dom @wterm/react

💡 如果项目是 Next.js,记得在next.config.mjs中把两个包加入transpilePackages(原因见下文"Next.js 项目额外配置")。

WASM 二进制已内嵌在包里,无需任何额外配置即可运行。

第 2 步:3 行代码渲染终端

导入<Terminal>组件和样式表,放入页面即可:

import { Terminal } from "@wterm/react"; import "@wterm/react/css"; function App() { return <Terminal />; }

刷新页面,一个 80×24 的终端就出现了。此时直接敲键盘,输入会原样回显到终端(echo 模式)。完整最小示例可参考官方文档 react.mdx 与 get-started.mdx。

第 3 步:接管键盘输入(onData 实战)

真正连接后端或脚本时,需要用useTerminalhook 接管输入。官方 React 包 README 给出的标准写法:

import { Terminal, useTerminal } from "@wterm/react"; import "@wterm/react/css"; function App() { const { ref, write } = useTerminal(); return ( <Terminal ref={ref} onData={(data) => { socket.send(data); // 把键盘输入发给你的 WebSocket 后端 }} /> ); }

useTerminal返回的四个成员覆盖了几乎所有控制场景(详见 README):

成员作用
ref传给<Terminal ref={ref}>
write(data)向终端写入内容(字符串或二进制)
resize(cols, rows)调整终端尺寸
focus()聚焦终端

常用配置速查

<Terminal>支持的关键 Props(完整表格见 react.mdx):

Prop默认值说明
cols/rows80 / 24初始行列数
theme—"solarized-dark"、"monokai"、"light"
autoResizefalse跟随容器自动调整尺寸
wasmUrl—改为独立静态文件加载 WASM(利于 CDN 缓存)
onData回显处理输入;不传则自动 echo
onTitle/onBell/onResize/onReady—标题、响铃、尺寸、就绪回调

切换主题只需一行:<Terminal theme="monokai" />。自定义主题通过 CSS 变量--term-fg、--term-bg、--term-color-0~--term-color-15实现。

Next.js 项目额外配置

Next.js 需要在配置中声明两个包,否则构建会报 ESM 相关错误:

// next.config.mjs const nextConfig = { transpilePackages: ["@wterm/dom", "@wterm/react"], };

零后端体验:搭配 just-bash

想让终端"真的能执行命令"而不用写一行服务端代码?@wterm/just-bash提供一个完全跑在浏览器里的 Bash 壳。官方 Next.js 示例的接线逻辑非常简洁(源码见 page.tsx):

const shell = new BashShell({ greeting: ["Hello from wterm!"] }); shell.attach(write); // 输出 → 终端 // <Terminal onData={(data) => shell.handleInput(data)} /> 输入 → 壳

支持ls、cat等命令、Ctrl+R 历史搜索、Tab 补全。想本地跑起官方演示:

git clone https://gitcode.com/gh_mirrors/wterm1/wterm cd wterm && pnpm install && zig build pnpm --filter nextjs dev

进阶方向

完成 3 分钟接入后,可以按需求继续扩展:

  • 连接真实 PTY:用@wterm/core的 WebSocket 传输对接服务端 PTY,实现 SSH 远程终端(参考示例 examples/ssh/README.md)
  • 满血 VT 兼容:换用@wterm/ghostty内核,支持 Kitty 图像协议、组合字符等高级特性(ghostty 文档)
  • 终端里渲染 Markdown:@wterm/markdown包
  • API 全量参考:api-reference.mdx、configuration.mdx

wterm 以极小的 WASM 体积换来了接近原生终端的能力,无论是做 IDE 内嵌终端、AI 聊天命令行,还是教学演示,都是一个轻量又完整的选择。

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

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

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

2026桌面端开发框架避坑指南:Electron/Qt/WPF/WinUI实战故障域解析

1. 这份指南不是“选哪个框架最好”&#xff0c;而是帮你避开三年后才踩到的坑桌面端开发框架——这个词最近半年在技术社区的讨论热度翻了三倍。不是因为新框架爆发&#xff0c;恰恰相反&#xff1a;Electron、Qt、WinUI 3、WPF 这四套主力方案&#xff0c;各自都走到了一个临…

作者头像 李华
网站建设 2026/9/26 23:56:29

AI 智能体真正上岗前,企业为什么要先重修基础设施?

一篇关于麦肯锡《Reimagining tech infrastructure for (and with) agentic AI》的深度解读&#xff1a;从试点与规模化的落差&#xff0c;谈到执行架构、成本账本和落地顺序。 一个 AI 智能体能回答“服务器为什么报警”&#xff0c;不代表它能安全地处理一次生产事故。 回答…

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

DeskcommCRM实践:统一客户管理与通信留痕的坐席工作台设计

1. 为什么做DeskcommCRM&#xff1a;客户信息不该散落在Excel和个人微信里1.1 坐席场景下的三大痛点DeskcommCRM这个项目名字&#xff0c;拆开来看是Desk&#xff08;工作台&#xff09; Comm&#xff08;通信&#xff09; CRM&#xff08;客户关系管理&#xff09;&#xff0c…

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

Spark+Flume+Kafka+HBase实时日志处理系统搭建与调优实践

简介&#xff1a;面向计算机、人工智能、通信工程及数据科学等相关专业学生与开发者&#xff0c;这套基于SparkFlumeKafkaHBase的实时日志处理分析系统&#xff0c;完整实现了从日志模拟生成、Flume实时采集、Kafka缓存中转、Spark流式处理&#xff0c;到HBase存储与网页可视化…

作者头像 李华
网站建设 2026/9/26 23:53:54

金融数据服务从零搭建:架构分层、存储选型与API性能优化实战

1. 金融数据服务从零搭建的核心思路1.1 为什么选这个方向金融数据服务这个方向&#xff0c;说白了就是解决一个很朴素的问题&#xff1a;数据从哪来、怎么存、怎么算、怎么给出去。我最早接触这块是因为帮一个做量化的小团队搭后台&#xff0c;他们每天要处理几十万条行情快照和…

作者头像 李华