EmulatorJS 快速上手指南:三步跑通浏览器复古游戏模拟器
【免费下载链接】EmulatorJSA web-based frontend for RetroArch项目地址: https://gitcode.com/GitHub_Trending/em/EmulatorJS
无需安装客户端和插件,拖一个 ROM 进浏览器就能跑起 GBA、NES 等经典平台,这是 EmulatorJS 做的事情:它是 RetroArch 的 Web 前端,用几行配置就能把模拟器嵌进你自己的页面。
三步完成本地部署
前置条件只有 Node.js。核心包在 package.json 里以 optionalDependency@emulatorjs/cores声明,npm i会顺带装上:
git clone https://gitcode.com/GitHub_Trending/em/EmulatorJS cd EmulatorJS && npm i npm run start三条命令依次完成克隆仓库、装依赖、起本地静态服务。启动后访问 http://localhost:8080/ 就是演示页:拖入 ROM 会按扩展名自动匹配核心,比如 .nes 对应 NES、.gba 对应 GBA;无法识别时会弹出平台选择框。
生产环境建议用 Stable 构建。项目分三个构建渠道:Stable 的代码和核心都经过测试,Latest 跟随 main 分支更新,Nightly 核心每日更新且 README 明确不建议用于生产。npm 包 @emulatorjs/emulatorjs 当前为 4.2.4。
功能全景
EmulatorJS 是一个库/插件而非独立网站,也不提供 Docker 容器。它加载编译为 WASM 的 RetroArch 核心并在页面中运行:核心逻辑拆在 data/src/ 里,包括 emulator.js(模拟器主体)、GameManager.js(游戏流程)、gamepad.js(手柄)、cache.js(IndexedDB 缓存)、netplay.js(联机对战)。覆盖平台从 NES、SNES、GBA、N64 到 PSX、世嘉系和街机,ROM 可以是 ZIP/7Z/RAR 压缩包,下载时自动解压。内置缓存采用 LRU 淘汰,默认 4GB 上限、5 天过期,同一款游戏第二次加载通常明显更快;界面自带 20 多种语言文件(含 zh-CN),位于 data/localization/。
典型场景
把模拟器嵌入自己的网站:配置 EJS_ 变量
集成核心是设置几个EJS_全局变量,再加载data/loader.js,最简示例如下:
<script> EJS_player = "#game"; EJS_core = "gba"; EJS_gameUrl = "roms/demo.gba"; EJS_pathtodata = "data/"; </script>EJS_player是游戏渲染容器的元素 ID,EJS_core指定核心名,EJS_gameUrl是 ROM 地址,EJS_pathtodata指向 data 目录。语言设置EJS_language = 'zh-CN'即切换为中文界面,对应文件缺失时会回退英文。完整变量清单(含 BIOS 上传、onExit 回调)可参考 index.html。
生产发布:压缩与缓存优化
文件上生产服务器前建议先跑一次压缩:
npm run minify缓存方面 index.html 里有现成示例:EJS_cacheConfig可控制开关,并设置cacheMaxSizeMB(4096)与cacheMaxAgeMins(7200)。缓存校验(HTTP 头 + HEAD 请求)、LRU 淘汰和清理策略的完整说明见 docs/CACHING.md。
排障速查
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| 页面提示核心未找到 | data/cores/ 下缺核心文件 | 重新执行npm i,安装 @emulatorjs/cores 核心包 |
| 首次加载慢 | 首次需下载核心与 ROM | 属预期行为,缓存系统会写入 IndexedDB,二次加载快 |
| 浏览器存储被占满 | 缓存超出大小或时效限制 | 用缓存管理界面清理,或调小cacheMaxSizeMB |
| 多线程选项不可用 | 浏览器不支持 SharedArrayBuffer | 服务端设置所需的两项响应头 |
| 界面回退成英文 | 语言文件拉取失败 | 检查 data/localization/ 下是否存在 zh.json 等对应文件 |
延伸资源
- README.md:Getting Started 与版本策略(Stable / Latest / Nightly)
- docs/CACHING.md:缓存系统的校验策略、配置参数与调试方法
- data/localization/zh.json:中文语言文件,同目录 README 说明如何新增语言
- minify/README.md:压缩流程
如果只需要一个能玩的演示,看完第一部分就够;计划把 EmulatorJS 嵌进产品里,建议从 index.html 的参考实现和缓存文档开始。
【免费下载链接】EmulatorJSA web-based frontend for RetroArch项目地址: https://gitcode.com/GitHub_Trending/em/EmulatorJS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考