三大框架玩转wterm Web终端React、Vue 3与Svelte完全指南【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wtermwterm 是一个面向 Web 的终端模拟器A terminal emulator for the web核心用 Zig 编写并编译为仅约 26 KB 的 WASM 二进制直接在 DOM 中渲染文本天然支持文本选中、复制粘贴和屏幕阅读器。本文是一份面向初学者的完整指南教你如何在React、Vue 3 与 Svelte三大主流框架中快速集成 wterm Web 终端组件几分钟内就能在自己的项目里跑起一个在线终端 为什么选择 wterm 浏览器终端相比 Canvas 渲染的传统方案如 xterm.jswterm 走的是DOM 渲染路线带来了几个实际好处️原生文本选择与复制用户可以直接选中终端文字并复制无需额外实现♿无障碍支持屏幕阅读器可以直接读取挂载的终端行接近原生的性能Zig 编译的 WASM 核心解析 VT100/VT220/xterm 转义序列内置主题solarized-dark、monokai、light开箱即用框架无关的核心同一套终端核心React / Vue / Svelte 各自提供官方组件包wterm 的包结构非常清晰每个框架都有独立的 npm 包包名说明wterm/core无头 WASM 桥接与 WebSocket 传输wterm/domDOM 渲染器Vanilla JS 终端wterm/reactReact 组件 useTerminalHookwterm/vueVue 3 组件 模板引用 APIwterm/svelteSvelte 组件 回调 API快速开始三步安装wterm终端包无论你用哪个框架安装步骤都只有三步第一步安装对应框架包 DOM 渲染层# React 项目 npm install wterm/dom wterm/react # Vue 3 项目 npm install wterm/dom wterm/vue # Svelte 项目 npm install wterm/dom wterm/svelte svelte第二步引入组件和主题样式CSS 内置全部主题一次导入即可第三步把Terminal /放进页面 —— 输入默认会自动回显立即可交互 ✨ WASM 二进制已内嵌在包中无需任何额外配置如需单独托管可传入wasmUrl属性。React 中使用wterm终端组件 useTerminal HookReact 版本提供Terminal组件和useTerminal钩子两者分工明确import { Terminal, useTerminal } from wterm/react; import wterm/react/css; function App() { const { ref, write } useTerminal(); return ( Terminal ref{ref} thememonokai onData{(data) socket.send(data)} / ); }onData接管键盘输入通常转发给 WebSocket 后端的 PTYonReady(wt)WASM 加载完成后触发拿到WTerm实例onTitle/onBell/onResize监听终端标题、响铃和尺寸变化useTerminal返回的命令式工具write/resize/focus让你可以在任意地方写入数据源码见 useTerminal.ts组件实现见 Terminal.tsx。Next.js 用户注意在next.config.mjs中将两个包加入transpilePackages即可const nextConfig { transpilePackages: [wterm/dom, wterm/react], };完整参考 react.mdx 文档。Vue 3 中使用wterm终端事件 模板引用Vue 版本采用组件事件 模板引用的惯用模式data、ready、resize等都作为组件事件监听script setup langts import { useTemplateRef } from vue; import { Terminal } from wterm/vue; import wterm/vue/css; const term useTemplateRef(term); function onData(chunk: string) { socket.send(chunk); } /script template Terminal refterm :thememonokai dataonData readyonReady / /template通过模板引用term.value可以调用write()、resize(cols, rows)、focus()。可用事件一览事件载荷说明datastring用户输入无监听时自动回显readyWTerm初始化完成titlestring转义序列修改标题bellnumberBEL 响铃计数resizecols, rows终端尺寸变化errorunknownWASM 加载失败一个真实的双终端演示浏览器内 Bash WebSocket 本地 Shell可以看 App.vue它展示了data、resize、ready的完整接线方式。Svelte 中使用wterm终端回调属性 bind 绑定Svelte 版本使用回调 props bind:this模式更符合 Svelte 的声明式风格script langts import { Terminal, type TerminalHandle } from wterm/svelte; import wterm/svelte/css; let terminal: TerminalHandle | undefined; function handleData(data: string) { socket.send(data); } /script Terminal bind:this{terminal} {handleData} thememonokai / button onclick{() terminal?.write(hello\r\n)}写入/button几个 Svelte 特色细节bind:this{terminal}直接绑定组件实例调用write/resize/focusbind:instance可获取底层WTerm实例同时接受classNameReact 习惯和class两种写法方便代码跨框架复用官方 Svelte 示例 App.svelte 演示了搭配wterm/just-bash实现纯浏览器内 Bash 的玩法ls、cat README.md都能直接跑无需任何后端。三大框架API对照属性与事件速查表三个框架的 API 语义完全对齐切换框架几乎零成本 功能ReactVue 3Svelte尺寸cols/rows属性:cols/:rows属性cols{88} rows{28}主题thememonokai:theme属性themeprop输入事件onDatadataonData回调 prop就绪事件onReadyreadyonReady回调 prop命令式写入useTerminal().write模板引用term.value.writebind:this后调用自动缩放autoResizeautoResizeautoResize共有属性cols、rows、wasmUrl、theme、autoResize、maxImageWidth、maxImageHeight、cursorBlink、debug在三个包中行为一致。进阶玩法接入PTY后端与浏览器内Bash让终端真正活起来有两条主流路线路线一WebSocket 连接真实 PTY把onData收到的数据通过 WebSocket 发给服务端 PTY如node-pty服务端输出再write回终端即可。wterm 还提供内置的WebSocketTransport支持二进制分帧和自动重连SSH 场景可以参考 examples/ssh/ 示例。路线二纯浏览器内 Bash零后端wterm/just-bash在浏览器内模拟了一个 Bash 环境支持ls、cat、cd等命令还有 CtrlR 历史搜索和 Tab 补全。适合做演示、教学和轻量工具三个框架示例都有现成接线React 文档react.mdxVue 示例examples/vue/src/App.vueSvelte 示例examples/svelte/src/App.svelte总结选择最适合你的wterm框架包场景推荐包React / Next.js 项目wterm/reactuseTerminalVue 3 项目wterm/vue 模板引用Svelte 项目wterm/sveltebind:this无框架的原生 JSwterm/domwterm 的核心理念是一个 WASM 终端核心多套框架组件。三套绑定共享同一个 WTerm DOM 渲染器你在任何一个框架里踩过的坑、积累的经验都可以直接迁移。现在就装上对应框架的包用三个代码块的最小示例把 Web 终端接入你的项目吧 ⌨️【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
CV论文日更工作流:ArXiv自动化获取+模块化验证+知识卡片沉淀 1. 这不是“刷论文”,而是一套可落地的CV研究日更工作流你有没有过这样的经历:早上打开ArXiv,看到一篇标题带“Vision Transformer”“LLaVA-2”“Multimodal Alignment”的新论文,点开PDF扫了三页,发现公式推导跳步、… · 2026/9/26 14:26:35
AI创新课程学习方法论:从理解到实践的正向路径 我不能为您生成关于“《人工智能与创新》网课答案2025”的博文内容。原因如下:该标题明确指向课程标准答案的索取或传播,属于典型的学术诚信风险内容。作为资深从业者与内容创作者,我始终坚持教育公平与知识尊重的基本原则:网课学… · 2026/9/26 14:26:35
2026年企业AI知识库私有化部署选型与落地实践指南 2026年还没过半,我已经陆续收到四五位在企业里负责数字化建设的朋友的消息,问的都是同一类问题:公司想上一套AI知识库,要求数据不出内网,要私有化部署,到底找谁做靠谱。这类需求今年明显井喷,原… · 2026/9/26 14:26:35
treg skill install 安装共享技能:SKILL.md 配方+密钥+工具三位一体完整指南 treg skill install 安装共享技能:SKILL.md 配方密钥工具三位一体完整指南 【免费下载链接】treg OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn 项目地址: https://gitcode.com/GitHub_Trending/treg/treg
treg skill i… · 2026/9/26 15:03:20
记账微信小程序 我的微信记账小程序上线啦,大家可以试试好不好用哦,好用的话可以分享一下。不好用的话也可以告诉我哪里不好用哦。谢谢大家啦。 · 2026/9/26 15:03:20
Status Deck:基于ESP32-S3的BLE嵌入式状态看板设计 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 15:03:20
Vibe Coding零基础保姆级教程:用TaoToken统一Key从0到1搭建个人主页与数字分身(第一课) /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 15:03:13
VS Code Python解释器配置本质:路径选择而非自动发现 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 15:03:01
IntelliJ IDEA中正确配置Git用户身份的完整指南 1. 为什么改 Git 用户这件事,90% 的 IDEA 用户都做错了? 你是不是也遇到过这样的情况:在 IntelliJ IDEA 里点一下 Commit,弹出的提交记录里显示的是“Unknown Author”或者一个早已离职同事的名字?或者更糟——你用公… · 2026/9/26 15:03:01
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46