Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 06:49
· 14 commits to main since this release

v0.1.0 — 第一个版本:三个库串成一条完整链路

第一个可以下载的版本。目标是最小但完整:用最少的依赖证明
cpp-httplib(HTTP 服务)+ webview(原生窗口)+ cpp-embedlib(前端打包进可执行文件)
这三件事能真的串起来,而不是各写各的 demo。

它是什么

跑起来是一个原生窗口,界面是本地 HTML 页面,但它不是从磁盘读的:
HTML / CSS / JS 全部被 cpp-embedlib 编译进了可执行文件,由后台的 cpp-httplib 服务器
从内存里发出来,窗口本身由 webview 创建(Windows 上是 Edge WebView2,
Linux 上是 GTK + WebKitGTK)。webview 用的是 0.12.0 的 C++ API,
窗口对象放栈上、靠 RAII 析构销毁。

里面有什么

  • 6 个 HTTP 接口(全部返回 application/json; charset=utf-8):
    GET /api/hello(C++ 后端的问候)、GET /api/time(本地时间 + 运行时长)、
    GET /api/echo?q=…(回显与长度)、POST /api/add(表单 a + b 求和,缺参数返回 400)、
    GET /api/assets(列出被内嵌的前端资源:路径 / MIME / 字节数)、
    GET /api/info(三个库的版本 + 平台 + pid + uptime)。
    首页 / 由 cpp-embedlib 的 httplib::mount() 兜底提供。
  • 3 个 JS → C++ 绑定(走 webview::bind,完全不经过 HTTP):
    cppNativeEcho(把文本交给 C++ 处理再回传)、cppNativeHandle(拿到原生窗口句柄,
    Windows 是 HWND、Linux 是 GtkWidget *)、cppCloseWindow(关闭窗口、结束消息循环)。
    这些回调跑在 UI 线程上,HTTP 服务跑在后台线程。
  • 端口:默认在 127.0.0.1 上自动挑一个空闲端口,也可以用 --port 18080 指定;
    端口被占用时弹对话框说明原因,而不是静默失败。
  • 依赖全部自动拉取:cpp-httplib v0.38.0、webview 0.12.0、cpp-embedlib(main),
    三个都走 FetchContent,不用手动 clone。
  • 构建:CMake ≥ 3.20 + 预设(Windows:x64 / x64-console;Linux:linux / linux-debug)。
    Windows 默认不弹控制台黑框,调试时用 x64-console。
  • CI:windows-latest + ubuntu-22.04 双平台配置与编译,Linux 侧另跑一遍 HTTP 冒烟测试。

下载

文件 平台 运行前提
webview-demo-v0.1.0-windows-x64.exe Windows 10/11 x64 WebView2 运行时(Win11 及较新的 Win10 一般自带)
webview-demo-v0.1.0-linux-x64 Linux x64 WebKitGTK 4.1(libwebkit2gtk-4.1-0)+ 可用的显示环境

两个二进制都是推 tag 之后由 CI 现场从该 commit 编出来的,不是手工上传的。

已知限制

  • macOS 未验证:webview 在 macOS 上走 WKWebView,代码里也留了分支,
    但构建脚本和 CI 都没有覆盖它,所以不敢说能跑。
  • 没有 install / 打包步骤:产物就是单个可执行文件(前端已经在里面了),
    但 Windows 侧依赖系统的 WebView2 运行时,Linux 侧依赖系统的 WebKitGTK ——
    这两样都要求运行环境里已经装好。
  • JSON 还是手写转义拼出来的;把这件事交给一个成熟的 JSON 库是后面版本的事。

完整变更

https://github.com/leiddev/webview-httplib-demo/commits/v0.1.0

(v0.1.0 是第一个 tag,没有可比较的上一个版本,所以给的是到这个 tag 为止的全部提交。)

这段说明是事后补写的:v0.1.0 发布时还没有「手写发布说明」的约定
(release-notes/<tag>.md 是 v0.1.1 才加的),正文当时只有一行自动生成的 changelog 链接。