依赖推荐说明
一、HTTP / 网络通信
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| axios | 1.x | 基于 Promise 的 HTTP 客户端,支持请求/响应拦截器、自动转换 JSON、取消请求、防 XSRF 等 | 浏览器端和 Node.js 端通用;支持请求重试、超时控制、并发请求(axios.all);相比 fetch API 封装更完善,内置错误处理和拦截器机制;官网:axios-http.com/ |
| qs | 6.x | URL 查询字符串的解析与序列化,支持嵌套对象、数组序列化 | 比 URLSearchParams 功能更强,支持深度嵌套对象编码(如 a[b][c]=1)、数组多种编码风格(indices/brackets/repeat);可配置深度限制防止原型污染;常配合 axios 处理 POST 表单数据;官网:github.com/ljharb/qs |
| sockjs-client | 1.6.x | SockJS 浏览器端客户端,提供类似 WebSocket 的 API,自动降级到轮询等传输方式 | 当 WebSocket 不可用时自动降级为 xhr-streaming、xdr-streaming、eventsource 等传输方式,确保在代理/防火墙等受限网络环境下仍能通信;需配合服务端 SockJS 使用;官网:github.com/sockjs/sock… |
| @stomp/stompjs | 7.x | STOMP 协议(Simple Text Oriented Messaging Protocol)的 JavaScript 客户端 | 在 WebSocket 之上提供发布/订阅消息模型,支持事务、确认机制、心跳检测;常用于与 RabbitMQ、ActiveMQ 等消息代理通信;替代旧版 stompjs,支持 TypeScript,API 更现代化;官网:stomp.github.io/ |
二、UI 组件库
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| element-ui | 2.15.x | 饿了么出品的 Vue 2 桌面端组件库,含表单、表格、弹窗、导航等 60+ 组件 | 仅支持 Vue 2;提供完整的中后台解决方案(布局、表单校验、数据表格、文件上传等);支持按需引入减小体积;国际化支持完善;Vue 3 项目需使用 Element Plus;官网:element.eleme.io/ |
| element-plus | 最新 | Element UI 的 Vue 3 版本,基于 Composition API 重写 | 继承 Element UI 的设计语言和 API 风格,全面支持 Vue 3 + TypeScript;支持暗色主题、按需引入;官网:element-plus.org/ |
| vant | 4.x(Vue 3)/ 2.x(Vue 2) | 有赞出品的移动端 UI 组件库,含 70+ 高质量组件 | 专为移动端 H5 设计,组件覆盖商品、购物车、地址编辑等电商场景;Vant 4 支持 Vue 3 + TypeScript,Vant 2 支持 Vue 2;支持按需引入、主题定制;官网:vant-ui.github.io/vant/ |
| ant-design-vue | 4.x | Ant Design 的 Vue 3 实现版本,企业级中后台 UI 组件库 | 继承 Ant Design 的设计体系,组件覆盖表格(虚拟滚动)、表单、图表等企业场景;支持动态主题、国际化;需配合 unplugin-vue-components 实现按需加载;官网:antdv.com/ |
| view-design | 4.x | iView 的继任者,Vue 2 企业级 UI 组件库 | 原 iView 3 更名而来,修复大量 Bug 并增加新组件;支持主题定制、国际化;如仍在用 iView 3 建议迁移至此;官网:www.iviewui.com/ |
三、工具函数
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| lodash | 4.x | JavaScript 实用工具库,提供数组、对象、字符串、函数等 300+ 工具函数 | 常用方法:_.get(安全取值)、_.debounce(防抖)、_.throttle(节流)、_.cloneDeep(深拷贝)、_.groupBy(分组)等;推荐使用 lodash-es(ESM 版本,支持 tree-shaking)或按需引入 lodash/get 减小体积;官网:lodash.com/ |
| dayjs | 1.x | 轻量级日期处理库,API 设计与 Moment.js 兼容 | 体积仅 2KB(Moment.js 约 70KB),API 与 Moment.js 几乎一致(dayjs().format('YYYY-MM-DD')),迁移成本低;支持插件机制扩展(相对时间、季度、自定义解析等);官网:day.js.org/ |
| date-fns | 4.x | 模块化、函数式的日期处理库 | 每个函数独立导出,支持 tree-shaking,只打包使用到的函数(如只引入 format 和 addDays);纯函数式无副作用,TypeScript 支持完善;官网:date-fns.org/ |
| js-cookie | 3.x | 简单轻量的 Cookie 读写库 | 提供 Cookies.get/set/remove 等 API,支持 JSON 序列化、过期时间设置、路径/域名/Secure/SameSite 属性配置;比手动操作 document.cookie 更安全便捷;官网:github.com/js-cookie/j… |
| js-sha256 | 0.11.x | SHA-256/SHA-224 哈希计算库 | 纯 JS 实现,无 Node.js 依赖,浏览器和 Node.js 通用;支持 HMAC-SHA256;常用于数据签名、完整性校验、密码哈希等场景;官网:github.com/emn178/js-s… |
| js-base64 | 3.x | Base64 编解码库,支持 UTF-8 安全编解码 | 提供 encode/decode 和 encodeURI/decodeURI(URL 安全版本)方法;相比 btoa/atob 原生方法,正确处理 Unicode/中文等多字节字符;官网:github.com/dankogai/js… |
| file-saver | 2.x | 客户端文件保存库,触发浏览器下载 | 解决各浏览器文件保存的兼容性问题,支持 Blob 和 URL 两种方式;常配合 xlsx 或 html2canvas 等库实现导出下载功能;官网:github.com/eligrey/Fil… |
| normalize.css | 8.x | CSS 重置库,消除浏览器默认样式差异 | 统一各浏览器的 margin/padding/字体/表格等默认样式,作为项目 CSS 基础层使用;比 reset.css 更温和,保留有用默认值而非全部清零 |
| nprogress | 0.2.x | 页面顶部细长进度条,指示页面加载或路由切换状态 | 仿 YouTube 风格的顶部进度条;常配合 Vue Router 的 beforeEach/afterEach 钩子使用;API 简洁:NProgress.start() / done() / configure();官网:ricostacruz.com/nprogress/ |
| path-to-regexp | 8.x | 将路径字符串(如 /user/:id)转换为正则表达式,用于路由匹配 | Express、Vue Router 等路由库的底层匹配引擎;支持命名参数、可选参数、通配符、自定义正则约束;可用于自定义路由或权限路径匹配场景;官网:github.com/pillarjs/pa… |
| bignumber.js | 9.x | 任意精度十进制运算库,解决 JavaScript 浮点数精度问题 | JavaScript 原生数字为 IEEE 754 双精度浮点,0.1 + 0.2 ≠ 0.3; BigNumber 可精确处理金融、区块链等对精度要求极高的计算场景;支持四则运算、取模、指数、比较等;官网:mikemcl.github.io/bignumber.j… |
| crypto-js | 4.x | JavaScript 加密/解密工具库 | 支持 MD5、SHA-1/SHA-256/SHA-512、HMAC、AES/DES/Triple DES/Rabbit 等常见加密算法;纯 JS 实现,浏览器和 Node.js 通用;常用于接口签名、敏感数据加密、密码哈希等场景;官网:github.com/brix/crypto… |
四、二维码
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| qrcode | 1.x | 二维码生成库,支持 Canvas、SVG、Terminal、Data URL 等多种输出方式 | 可在浏览器端生成二维码图片(Canvas/SVG),也可在 Node.js 端生成二维码保存为文件;支持自定义尺寸、边距、颜色、容错等级;替代已停止维护的 qrcodejs2;官网:github.com/soldair/nod… |
五、轮播 / 滑动
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| swiper | 11.x(Vue 项目)/ 12.x(Web Component) | 现代化触摸滑动组件,支持轮播、画廊、缩略图、进度条等 | 功能最全面的滑动组件,支持触摸/鼠标/键盘操作、自动播放、无限循环、视差效果、3D 切换动画等;注意:Swiper 9+ 移除了 swiper/vue 导出,改用 Web Component(swiper/element);Vue 项目建议锁定 v11 使用 swiper/vue 导出;官网:swiperjs.com/ |
| slidePage | 3.x | 全屏垂直滑动组件,适用于 H5 营销页/邀请函等全屏翻页场景 | 轻量级,支持触摸/鼠标滚轮滑动、动画回调、循环模式;相比 Swiper 更专注于全屏翻页场景 |
| @better-scroll/ | 2.x | 移动端滚动解决方案,解决移动端滚动卡顿、穿透等问题 | 核心包 @better-scroll/core + 按需加载插件(mouse-wheel、observe-dom、slide、pullup 等);解决 iOS 弹性滚动、安卓滚动穿透、fixed 定位抖动等移动端特有问题;官网:better-scroll.github.io/docs/ |
六、视频 / 音视频
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| video.js | 8.x | 开源 Web 视频播放器,支持 HTML5 视频和流媒体播放 | 跨浏览器统一播放器 UI,自动降级到 Flash(旧版);支持 HLS、DASH 等流媒体协议;丰富的插件生态(广告、字幕、画质切换等);可自定义皮肤和控件;官网:videojs.com/ |
| trtc-sdk-v5 | 5.x | 腾讯实时音视频 V5 版本 SDK,提供视频通话、语音通话、屏幕分享、低延迟直播等能力 | TRTC 新一代 Web SDK,API 设计更简洁,性能优化,支持更丰富的音视频能力;需配合 UserSig 签名使用;支持美颜、水印、混流等高级功能;新项目推荐使用此版本替代旧版 trtc-js-sdk |
| pdfjs-dist | 5.x | Mozilla PDF.js 的 npm 分发版,在浏览器中渲染和查看 PDF 文件 | 纯 JavaScript 实现的 PDF 查看器,无需浏览器插件;支持文本选择、注释、打印、缩放、页码跳转;可通过 Worker 异步解析大文件;官网:mozilla.github.io/pdf.js/ |
| pdfh5 | 1.x | 移动端 H5 PDF 预览组件 | 专为移动端设计的 PDF 查看器,支持手势缩放、翻页动画、懒加载;适配微信浏览器和各移动端 WebView |
| jmuxer | 1.x | H.264 裸流封装为 MP4 的库,用于将 H.264 视频流实时封装为浏览器可播放的 MP4 格式 | 接收 H.264 NAL 单元,封装为 fMP4 片段,通过 Media Source Extensions(MSE)喂给 <video> 标签实时播放;常用于 WebSocket 推流场景(如远程桌面、监控画面) |
七、H.264 / 视频编解码
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| guacamole-common-js | 1.x | Apache Guacamole 协议的 JavaScript 客户端实现,用于通过 Web 浏览器访问远程桌面 | 实现了 Guacamole 协议,支持 RDP、VNC、SSH 等远程桌面协议的 Web 化访问;配合 Guacamole 服务端使用,实现浏览器内远程桌面操作;注意:应为 dependencies 非 devDependencies;官网:github.com/padarom/gua… |
| gl-matrix | 3.x | 高性能 WebGL 矩阵/向量运算库 | 提供 vec2/vec3/vec4、mat3/mat4、quat 等模块,用于 3D 图形变换(投影、旋转、平移等);替代旧版 sylvester.js,性能更好、API 更规范;官网:glmatrix.net/ |
| @peculiar/webcrypto | 1.x | WebCrypto API 的 polyfill 实现,在不支持 WebCrypto 的环境中提供加密能力 | 实现了 W3C WebCrypto API 规范,支持 RSA/EC/AES/HMAC 等算法;当运行环境(如低版本 Node.js 或 WebView)不支持 crypto.subtle 时作为 polyfill 使用 |
八、虚拟键盘 / 输入
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| simple-keyboard | 3.x | 虚拟屏幕键盘组件,提供可自定义的屏幕键盘 UI | 用于 VDI 远程桌面、Kiosk 自助终端、触屏设备等无物理键盘场景;支持多语言布局、自定义按键、数字键盘、输入验证;需同时引入 CSS 样式文件;官网:virtual-keyboard.js.org/ |
九、原生桥接 / 微信
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| dsbridge | 3.x | H5 与原生 App(Android/iOS)双向通信的桥接库 | 提供同步/异步调用原生方法的能力,也支持原生调用 H5 方法;相比 JSBridge 更简洁,支持回调、事件监听;需原生端同步实现 DSBridge 协议;官网:github.com/wendux/DSBr… |
| weixin-js-sdk | 1.6.x | 微信 JS-SDK,使用微信提供的分享、支付、扫码、定位等能力 | 仅在微信浏览器环境有效;需后端配合获取签名(access_token → jsapi_ticket → signature);常用功能:自定义分享内容、微信支付、扫一扫、获取地理位置、选择图片等;官网:developers.weixin.qq.com/doc/offiacc… |
十、埋点 / 调试
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| eruda | 3.x | 移动端浏览器调试控制台,提供类似 Chrome DevTools 的调试面板 | 在手机浏览器中查看 Console 日志、Network 请求、DOM 元素、Storage 存储、CSS 样式等;通过 eruda.init() 一行代码启用;适合无法连接电脑调试的移动端 H5 场景;官网:eruda.liriliri.io/ |
十一、区块链 / Web3
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| web3 | 4.x | 以太坊 JavaScript API,用于与以太坊节点交互 | 读取链上数据(余额、合约状态)、发送交易、调用/部署智能合约、监听事件;v4 为 TypeScript 重写版本,模块化架构(web3-eth、web3-utils 等);官网:web3js.org/ |
| ethers | 6.x | 以太坊交互库,提供钱包管理、合约调用、交易签名等功能 | 与 web3.js 定位相同但设计理念不同:更注重安全性和简洁性;内置 Provider/Signer 抽象,合约交互更类型安全;v6 支持 ESM、树摇优化;官网:docs.ethers.org/ |
| @walletconnect/web3wallet | 1.x | WalletConnect 协议的 Web3 钱包实现,实现 DApp 与钱包的扫码连接 | WalletConnect 允许用户通过扫描二维码将 DApp 与移动端钱包连接,无需安装浏览器插件;此包实现了钱包端逻辑(会话管理、签名请求处理);官网:walletconnect.com/ |
| @metamask/eth-sig-util | 7.x | MetaMask 签名工具库,处理 EIP-712 类型化数据签名 | 实现了 EIP-712(类型化结构数据签名)规范,用于生成和验证 MetaMask 风格的签名数据;常用于 DApp 与 MetaMask 钱包的签名交互场景 |
| ethereumjs-util | 7.x | 以太坊工具函数集合,提供地址校验、私钥公钥转换、RLP 编解码等 | 底层工具库,包含以太坊常用的编解码(RLP)、地址格式转换(EIP-55 校验和地址)、哈希计算、签名验证等基础操作 |
| sm-crypto | 0.3.x | 国密算法库,实现 SM2/SM3/SM4 国产密码算法 | SM2 用于非对称加密/签名(替代 RSA),SM3 用于哈希(替代 SHA-256),SM4 用于对称加密(替代 AES);国内政务/金融项目合规要求使用国密算法 |
十二、Excel / 文档
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| xlsx | 0.18.x | Excel 文件读写库(SheetJS 社区版),支持 XLSX/XLS/CSV 等格式 | 在浏览器端和 Node.js 端读写 Excel 文件;支持多 Sheet、样式、公式、合并单元格等;社区版免费但样式支持有限;注意:新版 SheetJS Pro 改为付费模式;官网:sheetjs.com/ |
| jszip | 3.x | ZIP 压缩/解压库,创建、读取、修改 ZIP 文件 | XLSX 文件本质是 ZIP 压缩包(含 XML 文件),jszip 常配合 xlsx 库使用;也用于前端打包下载、解压上传文件等场景;支持异步 API、流式处理;官网:stuk.github.io/jszip/ |
十三、国际化
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| vue-i18n | 8.x(Vue 2)/ 11.x(Vue 3) | Vue.js 官方国际化插件,实现多语言切换 | 提供 $t() 翻译函数、v-t 指令、插值、复数、日期/数字格式化;支持懒加载语言包、热更新;v8 对应 Vue 2,v9/v11 对应 Vue 3;官网:kazupon.github.io/vue-i18n/ |
| i18next | 25.x | 独立于框架的国际化解决方案,功能最全面的 i18n 库 | 不依赖任何前端框架,可与 React/Vue/Node.js 等任意环境配合;支持命名空间、插值、复数、上下文、语言回退等高级功能;配合 react-i18next 或 vue-i18next 适配各框架;官网:www.i18next.com/ |
十四、图表 / 可视化
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| echarts | 5.x | 百度开源的数据可视化图表库,支持折线/柱状/饼图/地图/关系图等 20+ 图表类型 | 功能全面,支持大数据量渲染、动画过渡、主题定制、数据缩放、组合图表;内置中国地图数据;支持 SVG/Canvas 双渲染模式;官网:echarts.apache.org/ |
| gsap | 3.x | 高性能 JavaScript 动画库,用于创建流畅的 CSS/DOM/SVG/Canvas 动画 | 动画性能优于 CSS 动画和 jQuery 动画;支持时间线(Timeline)编排复杂动画序列、ScrollTrigger 滚动驱动动画、SVG 路径动画;注意:商业使用需授权许可;官网:gsap.com/ |
| animate.css | 4.x | 预置 CSS 动画效果库,提供 80+ 开箱即用的动画类名 | 使用方式:给元素添加 animate__animated animate__fadeIn 等 class 即可触发动画;涵盖淡入淡出、弹跳、翻转、缩放、滑动等效果;适合快速添加页面过渡动画;官网:animate.style/ |
十五、Node.js 后端专用
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| puppeteer | 25.x | Chrome/Chromium 浏览器自动化控制库,通过 DevTools Protocol 操控浏览器 | 用于 RPA 自动化(表单填写、数据抓取、截图、PDF 生成)、UI 自动化测试、页面性能分析等;自带 Chromium,无需手动安装浏览器;支持无头模式(headless)和有头模式;v25 要求 Node ≥22.12;官网:pptr.dev/ |
| prom-client | 15.x | Prometheus 客户端库,在 Node.js 应用中暴露和上报指标 | 提供 Counter/Gauge/Histogram/Summary 四种指标类型;内置默认指标(CPU、内存、事件循环等);配合 Prometheus pushgateway 实现指标推送,或配合 Grafana 可视化监控;官网:github.com/siimon/prom… |
| commander | 14.x | Node.js 命令行程序开发框架,解析命令行参数和选项 | 声明式定义命令、选项、参数;自动生成帮助信息(--help);支持子命令、可变参数、选项默认值;适合开发 CLI 工具;要求 Node ≥20;官网:github.com/tj/commande… |
| tough-cookie | 6.x | Cookie Jar 实现,管理 HTTP Cookie 的存储、匹配和序列化 | 实现了 RFC 6265 规范,支持 Cookie 的域名/路径匹配、过期清理、HttpOnly/Secure/SameSite 属性;常配合 HTTP 客户端自动管理 Cookie;v6 为 ESM 模块;官网:github.com/salesforce/… |
| minimist | 1.2.x | 轻量级命令行参数解析器,将 process.argv 解析为对象 | 极简实现(约 100 行代码),无依赖;将 --name=value 解析为 { name: 'value' },--flag 解析为 { flag: true };适合简单脚本场景 |
| minimatch | 10.x | 文件路径 glob 模式匹配库,判断路径是否符合通配符规则 | 实现 Bash 风格的 glob 匹配(*、**、?、[a-z] 等);常用于文件筛选、路径过滤;v3 有原型污染漏洞,建议升级至 v10 |
| rimraf | 6.x | 跨平台递归删除目录/文件,相当于 rm -rf 的 Node.js 版本 | 解决 Windows 下 rm -rf 不可用的问题,处理文件占用、权限等异常情况;常用于构建前清理输出目录、删除临时文件;v6 为 ESM 模块,要求 Node ≥20 |
| terser | 5.x | JavaScript 压缩混淆工具,将 JS 代码压缩为更小的体积 | 替代已废弃的 uglify-es/uglify-js,完整支持 ES6+ 语法;支持删除死代码(tree-shaking)、变量名混淆、压缩输出;可通过 terser-webpack-plugin 集成到 Webpack;官网:terser.org/ |
| json-schema | 0.4.x | JSON Schema 验证库,根据 Schema 定义校验 JSON 数据结构 | 定义数据格式规范(字段类型、必填、取值范围等),运行时校验数据是否符合规范;低频使用场景 |
十六、其他
| 依赖 | 推荐版本 | 用途 | 说明 |
|---|
| vue-clipboard2 | 0.3.x | Vue 2 剪贴板操作插件,封装 Clipboard.js 提供 v-clipboard 指令 | 通过 v-clipboard:copy="text" 指令一键复制文本到剪贴板,支持复制成功/失败回调;Vue 3 项目推荐使用原生 navigator.clipboard.writeText() API |
| copy-webpack-plugin | 14.x | Webpack 插件,将文件/目录从源路径复制到构建输出目录 | 常用于复制静态资源(图片、字体、配置文件等)到 dist 目录;支持 glob 模式匹配、文件变换(transform)、过滤(filter);要求 Node ≥20.9 |
| cnchar | 3.x | 中文汉字处理工具库,支持拼音、笔画、偏旁部首、繁体转换等 | 常用功能:汉字转拼音、笔画数查询、按笔画排序、繁简转换;适合中文教育、搜索提示等场景;官网:github.com/nicethemes/… |
| watermark-dom | 2.x | DOM 水印组件,在页面上叠加不可去除的防泄密水印 | 生成覆盖全页面的文字/图片水印层,防止截图泄密;支持自定义水印文字、角度、密度、颜色;常用于企业后台系统防截屏场景 |
十七、仅支持 <script> 标签引入的依赖
以下库不支持 npm 安装,只能通过 HTML <script> 标签直接引入。
| 库文件 | 全局变量 | 说明 |
|---|
| charting_library/ | — | TradingView 图表库(本地嵌入),提供专业金融 K 线图、技术指标图表;商业软件需授权;仅支持本地 script 引入 |
十八、已废弃依赖替换清单
以下依赖已废弃,建议按清单替换。
| 废弃依赖 | 推荐替代 / 操作 | 说明 |
|---|
request | axios 或 node-fetch | 已废弃,不再维护 |
querystring | URLSearchParams 或 qs | 已废弃,与 qs 功能重叠 |
uglify-es | terser | 已废弃,terser 完整支持 ES6+ |
md5-node | Node.js 内置 crypto.createHash('md5') | 不再更新,Node.js 内置模块零依赖 |
log-timestamp | pino 或自定义 | 不再更新 |
child_process / fs / http / path | 移除 | npm 上的安全占位包,Node.js 内置模块无需安装 |
babel-polyfill | core-js + @babel/preset-env 的 useBuiltIns | 已废弃,按需引入 polyfill 更优 |
babel-core / babel-preset-es2015 | @babel/core + @babel/preset-env | Babel 6 体系已废弃,需整体迁移至 Babel 7 |
qrcodejs2 | qrcode | 不再维护,qrcode 功能更全面 |
vue-video-player | 直接使用 video.js | 不再更新,video.js 8 原生支持 Vue 集成 |
stompjs | @stomp/stompjs | 不再更新,@stomp/stompjs 支持 TypeScript |
sylvester.js | gl-matrix | 不再更新,gl-matrix 性能更好 |
tinyh264 | 保留但移至 dependencies | 不再更新, |
h264-converter | 保留但移至 dependencies | 不再更新 |
十九、VDI 远程桌面插件
1. ws-scrcpy(Netris MediaServer)
NetrisTV/ws-scrcpy(曾用名 ws-scrcpy,后更名为 Netris MediaServer),Apache 2.0 许可证。基于 WebSocket 的 Android 设备 Web 投屏方案,TypeScript 实现,支持多路复用(Multiplexer)在同一 WebSocket 上复用多个逻辑通道。
| 项目 | 说明 |
|---|
| 功能 | 通过 WebSocket 将 Android 设备画面实时投射到浏览器,并支持键鼠/触摸操控 |
| 实现协议 | scrcpy 私有协议(WebSocket 传输 H.264 视频流 + 二进制控制消息) |
| 视频解码器(4 种,按优先级自动选择) | ① MsePlayer — 基于 h264-converter,使用浏览器 Media Source Extensions (MSE) 将 H.264 NAL 单元喂给 <video> 标签播放 |
| ② BroadwayPlayer — 基于 Broadway.js(WebAssembly H.264 解码器),纯 WASM 解码 + Canvas YUV 渲染,兼容性最好 |
| ③ WebCodecsPlayer — 使用浏览器原生 WebCodecs API (VideoDecoder) 硬件加速解码,性能最优但需 Chrome 94+ |
| ④ TinyH264Player — 基于 tinyh264(Web Worker + WASM 解码),YUV 渲染,作为兜底方案 |
| 控制消息 | 按键(TYPE_KEYCODE)、文本输入(TYPE_TEXT)、触摸(TYPE_TOUCH)、滚动(TYPE_SCROLL)、返回/亮屏(TYPE_BACK_OR_SCREEN_ON)、剪贴板读写(TYPE_GET/SET_CLIPBOARD)、旋转设备(TYPE_ROTATE_DEVICE)、推送文件(TYPE_PUSH_FILE) 等 |
| 手势处理 | FeaturedInteractionHandler / SimpleInteractionHandler — 将浏览器触摸/鼠标事件转换为 scrcpy 控制消息 |
| 适用场景 | Android 设备/云手机的远程投屏与操控 |
2. guacamole-common-js(Apache Guacamole)
guacamole-common-js(Apache 2.0 许可证),Apache Guacamole 远程桌面网关的 JavaScript 客户端库。Guacamole 是一个无插件远程桌面网关,后端 guacd 代理 RDP/VNC/SSH 等协议,前端通过 WebSocket 与网关通信,无需直接处理远程桌面协议细节。
| 项目 | 说明 |
|---|
| 功能 | 在浏览器中访问远程桌面(RDP/VNC/SSH),通过 Guacamole 网关中转,前端无需安装插件 |
| 实现协议 | Guacamole 协议 — Apache Guacamole 自有的远程桌面网关协议,后端 guacd 代理 RDP/VNC/SSH 等协议 |
| 核心类 | Guacamole.WebSocketTunnel(WebSocket 隧道)、Guacamole.Client(客户端,渲染 Canvas)、Guacamole.Mouse.State(鼠标状态) |
| 交互能力 | 鼠标/触控事件 → Guacamole Mouse State 转发;键盘事件转发(sendKeyEvent);显示缩放(display.scale()) |
| 适用场景 | Windows/Linux 虚拟桌面的远程访问与操控(通过 Guacamole 网关代理 RDP/VNC/SSH 协议) |
3. noVNC
noVNC(MPL 2.0 许可证),HTML5 VNC 客户端,使用 WebSocket 连接 VNC 服务器,纯浏览器端 Canvas 渲染,无需安装插件。
| 项目 | 说明 |
|---|
| 功能 | 在浏览器中访问 VNC 远程桌面,支持多种编码格式和加密认证 |
| 实现协议 | RFB 协议(Remote Framebuffer Protocol,即 VNC 协议,RFC 6143) |
| 核心模块 | rfb.js(RFB 协议核心)、websock.js(WebSocket 高性能缓冲)、display.js(Canvas 渲染)、des.js(DES 加密,VNC 认证)、decoders/(Raw/CopyRect/RRE/Hextile/Tight 等编码解码器)、input/(键盘/手势输入) |
| 连接方式 | new RFB(targetElement, url, options) — 支持 WebSocket 子协议传递认证信息 |
| 配置项 | scaleViewport(自适应缩放)、qualityLevel(图像质量)、compressionLevel(压缩级别)、viewOnly(只读模式)、showDotCursor(显示光标) |
| 适用场景 | 通用 VNC 远程桌面访问,适用于 Linux/轻量级虚拟机的远程操控 |