@ekroh/空虚
一个灵魂,许多平台. 整个Android,iOS,一个代码库和身份, 网络和桌面.
文档 : https://anderscan.github.io/ekrooh 页面存档备份,存于互联网档案馆
短跑时间(孔道)上跨平台应用的无聊靴子: a 二进制线条协议、插件内核、 RPC 信使、 传输和本地主机 桥梁,加上一个参考应用.
vision.md: 这个项目是和不是.AGENTS.md:如何开发而出"克能"命令.CONTRIBUTING.md:如何贡献.RELEASING.md:如何切开放出.docs/: 内部发展成果评估docs/adr/)和代理业务;而不是公共网站.
型号
前端( 浏览器 或 WebView) 被写成只能到达后端 通过一个WebSocket 携带二进制框信息.
- 在设备上, 工作盘运行一个为网络服务的回转的 HTTP+WS 服务器
应用程序、媒体文件和协议套接字。 页面连接到
ws://location.host。 。 。 . VITE_TRANSPORT_MODE=mock选择模拟传输(测试).- 浏览器 Dev 在 Dev 后端通过
VITE_BARE_WS_URL。 。 。 .
UI从来没有在工作间,赤裸,或主办IPC上分会. @ekrooh/bare/core
描述线条协议,而不是执行协议的运行时间.
| 任期 | 含义 |
|---|---|
| 前端 | Web UI:浏览器中的Vite捆绑,或者WebView中相同的捆绑. |
| 后端 | 运行核心捆绑,用前端表达框架协议. |
| 东道主 | 原生外壳 (Android/iOS):启动后端,拥有系统API,注入会话靴. |
仓库布局
core/: 有线编码器,插件路由器, RPC 信使, 主机 IPC ()core/messages, (中文(简体) ), 循环服务器( n)core/server),工人条目(core/main.core.ts) (中文(简体) ).plugins/: canonic 插件 (core.health, (中文(简体) ),core.discovery, (中文(简体) ),core.permissions, (中文(简体) ),vendor.media)和键入事件构建器.web/transports/数字 :MessageTransport和模拟运输.android/: 主机库:bare-host(IPC协调员,插件注册,WebView客户端).ios/: 主机 Swift 软件包BareHost(单位:千美元)Package.swift) (中文(简体) ).examples/数字 :web/, (中文(简体) ),android-app/, (中文(简体) ),ios-app/, (中文(简体) ),consumer-basic/。 。 。 .e2e/: 模拟运输上的 Playwright specs.scripts/: Dev跑者,Playwright包装机,预建取取器.apps/docs/:公共docs站点(Astro Starlight, GitHub Pages).templates/, (中文(简体) ),research/:共享部署模板;设计说明.prebuilds/: Bure Kit 预建(被忽略的建设输出).
公众表面是 exports 地图在 package.json (单位:千美元)@ekrooh/bare/core, (中文(简体) ),
/runtime, (中文(简体) ), /plugins, (中文(简体) ), /plugins/*/events, (中文(简体) ), /transports) (中文(简体) ). 它指着
汇编的无害环境管理和类型申报 dist/ (建造与 vp pack) (中文(简体) ). 消费者
从未看到 TypeScript 源代码 .
支持矩阵
| 运行时间 | 状态 | 运输 | 页:1 |
|---|---|---|---|
| 浏览器 (dev) | 头等舱 | 网络安全套 | Vite + 本地后端( R)VITE_BARE_WS_URL(中文(简体) ) |
| 浏览器( 测试) | 头等舱 | 雾 | 决定游戏机运行 |
| 机器人 | 头等舱 | 网络安全套 | 同源回路套接字, cookie 认证 |
| iOS系统 | 一等(参考对等) | 网络安全套 | 同源回转套接字,饼干认证;宿主船舶作为源(ios/, SPM) 在发行标签上 |
| 桌面 | 参考文献(macOS) | 网络安全套 | Zig 主机+系统网络视图+侧车 bare; 见 examples/desktop-app |
均等政策:核心协议和插件合同是运行时不可知的. 能力是选入的插件,可能具有运行时间的特殊性. 插件报告 不支持有决定性错误的行为 。 特性代码调用插件 事件,从不原始平台 API.
信件协议
二进制框 : version (1字节), type (1字节), headerLen (2字节,BE),
payloadLen (3字节,BE), header (UTF -8 JSON), (美国英语), payload (可选).
执行人: MessageProtocol 内 core/messages (单位:千美元)wire-codec.ts) (中文(简体) ).
页眉类型 : DISPATCH, (中文(简体) ), INVOKE_REQUEST, (中文(简体) ), INVOKE_RESPONSE (回复)
requestId) (中文(简体) ). dispatch 是火和遗忘; invoke 请求/答复和
超时.
插件
核心船只没有产品特征。 插件ID是命名空格 (app.photos· ;
core.* 财务报告和审定财务报表 vendor.* 为框架预留)
本地插件( e)health.ping) (中文(简体) ). 运行时间适配器 : web, (中文(简体) ), android, (中文(简体) ), ios, (中文(简体) ), bare。 。 。 .
Canonical插件在Repository布局下列出.
媒体从不跨出电线(机身16米B). vendor.media 是参考文献
对于带外字节: 主机从原地选择或抓取文件, 工作列
在回路服务器上挂载并返回一个 URL,网络层则装入
带饼干认证的 URL .
循环服务器和认证
一个服务器( O)core/server/static-file-server.ts)服务于网络应用 /, 插件
媒体挂载,和 WebSocket 升级。 在设备上它绑起 127.0.0.1 一个
麻黄口. 每个请求都用每会的代号敲门:
- 弹壳注射
window.__ekrooh = { bootstrap },一个单用非(绝不是生代号). - 页面呼叫
POST /login与非ce并收bare_session_<port>饼干HttpOnly; SameSite=Strict; Path=/) (中文(简体) ). 港口 在名称中,将两个回回服务器 在一个饼干店分开。 生下来的 符号绝不是登录证书 . - 饼干授权
<img>, (中文(简体) ),<video>, (中文(简体) ),fetch,WS升级. 非浏览客户端发送X-Bare-Token没有?token=倒计时 (见docs/adr/0003-loopback-auth-surface.md) (中文(简体) ).
只有靴子绑住 / 是公共预奥。 工人写道:
{ origin, port, bootstrap } 改为 handoff.json 在主机的 sandbox dir (永远不要)
); 主机负载 http://127.0.0.1:<port>/index.html 财务报告和审定财务报表
删除文件.
每个请求还必须针对绑定回路服务器(Host),和一页
Origin 必须是该服务器或明确允许的服务器,在每个模式中.
Dev 后端( L)mode=dev运行相同的捆绑,并关闭认证
ws://localhost:8080,允许 Vite dev 来源(origin= 示众.
测试
- 单位: vitest (
vp test用于编码器、路由器、RPC信使、运输; J Unit for the Kotlin host; XC Test for the Swift host. (原始内容存档于2018-09-21). - 类型检查 :
tsc --noEmit,该部分vp check。 。 。 . - 整合:模拟运输的Playwright e2e(
npm run test:e2e:web) (中文(简体) ). 浏览器通过scripts/playwright-local-browsers.mjs输入.playwright-browsers/。 。 。 . - 原生 :
npm run test:ios运行 Swift XCTest 套件和模拟器上的UI测试.
图标
名称列表 : AGENTS.md共同之处:
| 命令 | 目的 |
|---|---|
vp check | 格式、 提示、 类型检查 |
vp test | 单位测试 |
npm run test | 单位+ 剧作家 e2e |
npm run dev | Vite dev 服务器 + 赤裸后端( 重开监视) |
npm run dev:mock | 使用模拟运输 |
npm run build:core | 套装 core/main.core.ts (建设) |
npm run build:web | 构建 examples/web 进入Android应用程序的资产 |
npm run build:ios | iOS 输入( addons、 捆绑、 网络资产、 xcodegen) |
npm run prebuilds | 获取赤色 Kit 预建( 已检查, 无符号) |
npm run playwright:install | 将铬下载到 .playwright-browsers/ |
npm run smoke:loopback | 烟雾测试回转服务器 bare |
Android 构建
需要Android SDK (英语)local.properties 与 sdk.dir=...和赤裸克特预建.
vp install
npm run prebuilds
npm run build # core bundle + web assets
./gradlew :examples:android-app:assembleDebug
./gradlew build 还运行主机库的JUnit测试.
完成出版的AAR
io.github.anderscan.ekrooh:bare-host 在马文中心(无证书).
把它固定在同一个版本 @ekrooh/bare数字 :
dependencies {
implementation "io.github.anderscan.ekrooh:bare-host:<version>"
}
GitHub 软件包是一个需要 read:packages 符号 。 偏爱马文中心.
iOS 构建
需要 Xcode 、 简陋的 Kit 预建 xcodegen。 。 。 .
vp install
npm run prebuilds # also fetches prebuilds/ios/BareKit.xcframework
npm run build:ios
npm run test:ios
页:1
- 处理
examples/android-app/src/main/assets/作为构建输出。 维特清除 散开assets/main-*.{js,css}在重建之前.