夜雨聆风 > > 办公文件 > 03-从0到1手搓FinClaw:源码打包exe
当前时间: 2026-07-01 01:37:29
分类:办公文件
评论(0)
03-从0到1手搓FinClaw:源码打包exe前2期咱们聊了怎么把源码领回家,怎么搭环境,今天咱们要干点更有挑战性的——给这个Web版的OpenClaw,穿上一件“一键安装”的外衣。为啥要折腾这个?因为OpenClaw原生是运行webchat的服务,跑起来得配环境、敲命令,对普通用户来说,门槛堪比“徒手造火箭”。咱们的FinClaw目标是做桌面客户端,所以今天这步“打包成exe”的实验,就是为未来铺路。咱们得先探探路,看看把这货塞进一个exe里,到底行不行!第一步:摸清源码的“骨架”
动手之前,agent给OpenClaw把把脉。别看它文件多,其实骨架很清晰。核心就是那个Gateway Server,你可以把它想象成整个系统的“大脑”和“总指挥”。这个“大脑”默认在 `18789` 端口听着,负责调度一切。它内部有几个关键的“器官”:- Plugin Registry(插件注册中心):这是它的“百宝箱”,所有的渠道(比如Telegram)、AI提供商(比如OpenAI)、工具(MCP)都注册在这里,随用随取。
- Agent Runtime(代理运行时):这是它的“执行中枢”,负责管理会话、执行工具、处理上下文,你发给它的消息,都是这里在流转。
- Channels & Providers(渠道与提供商):这就是它的“手”和“嘴”,一个负责对外连接(如Slack),一个负责对接AI大脑(如Anthropic)。
搞清楚这个架构,咱们打包的时候才知道哪些是“心脏”不能动,哪些是“阑尾”可以切。第二步:Tauri + Rust 才是版本答案
既然要打包,市面上工具不少。但咱们做 FinClaw,得选个合适的工具。以前大家爱用 Electron,但这玩意儿就像是“为了喝杯醋包了顿饺子”——把整个 Chrome 浏览器都打包进去了,动不动就 100MB 起步,内存占用高得吓人,简直是“内存杀手”。咱们这次要用的方案是:**Tauri + Rust**。简单说,Tauri 不像 Electron 那样自带浏览器,而是直接调用你电脑系统自带的 WebView(Windows 上是 Edge 的 WebView2,Mac 上是 WebKit)。后端的逻辑呢,咱们用 Rust 来写。- 极致轻量:打包出来的 exe 可能只有几兆,比起 Electron 的“巨无霸”,它很精简。
- 性能怪兽:Rust 的性能不用多说,内存安全又跑得快,启动速度嗖嗖的。
- 自研 UI 空间大:前端咱们可以用自己熟悉的 Web 技术(Vue/React)写,通过 Tauri 跟后端的 Rust 通信,既能享受 Web 的开发效率,又能拥有原生应用的性能。
虽然 OpenClaw 原生是 Node.js 环境,但咱们这次的目标是验证“打包可行性”,所以咱们先用 Tauri 把这层 Web 界面“壳”给套上,把后端服务跑通。第三步:实战演练,给代码穿上“外衣”
好了,咱们上手干活。要把 OpenClaw 变成 exe,其实就是把它的 Web 前端塞进 Tauri 的肚子里。- **环境准备**:首先,你得在电脑上装好 Rust 环境(去 rustup.rs 一键安装,无脑下一步就行)。然后,在项目根目录运行 `npm install tauri`,把 Tauri 的依赖拉进来。
- **初始化 Tauri**:运行 `npm run tauri init`。这时候终端会问你几个问题,比如应用叫啥名(咱们叫 FinClaw-Test),窗口多大(先设个 800x600 吧)。这一步会在项目里生成一个 `src-tauri` 文件夹,这里就是 Rust 后端的大本营。
- **配置“大脑”连接**:OpenClaw 的后端服务(Gateway)需要启动。在 Tauri 的 Rust 代码里(`src-tauri/src/main.rs`),我们可以写一段逻辑,让应用在启动时,自动在后台把 OpenClaw 的 Node.js 服务拉起来,监听 `18789` 端口。
- **前端对接**:修改前端的配置文件(比如 `vite.config.js`),把代理指向本地的 Tauri 窗口。这样,当你打开打包好的软件时,界面其实是 Tauri 渲染的,但数据是发给本地启动的 OpenClaw 后端的。
这一步可能会有点枯燥,全是配置文件,但相信我,看到那个熟悉的 Web 界面出现在独立窗口里时,一切都值了。但是这些其实不是需要我们自己真的动手,可以让agent规划进行执行的,不能让agent偷懒。第四步:一键运行的快乐
配置搞定!在终端敲下 `npm run tauri build`。这时候电脑风扇可能会开始狂转,Rust 编译器正在疯狂工作,把代码编译成机器语言。几分钟后(Rust 编译确实有点慢,忍忍),你会在 `src-tauri/target/release` 目录下发现一个 `.exe` 文件(Windows)或者 `.app`(Mac)。找不到路径就直接只会agent给你打开文件夹。不出意外的话,就要出意外了
;你将会看到下面大大的错误。这是要启动gateway服务的必经过程,openclaw后端服务需要链接上这个gateway;别怕,有agent在,把每个错误丢个agent,让他分析解决,提供解决办法,啥都能搞定。如果一切顺利,你就能进入openclaw的功能页面了。一个独立的窗口会弹出来,没有浏览器的地址栏,没有杂乱的标签页,只有干干净净的 OpenClaw 界面。能进入UI页面,说明打包成功。然后配置自己的API,你输入指令,AI 回复,一切流畅得像原生应用一样。这就证明,咱们的路子走通了!OpenClaw 完全可以被“收容”进一个安装包。第五步:精简功能
目前的这个 exe 其实是个“缝合怪”——它里面还藏着 Node.js 的环境,体积还不够极致。而且,OpenClaw 原生支持那么多渠道(WhatsApp, Slack...)和那么多 AI 提供商,对于咱们 FinClaw 的初级版本来说,太臃肿了。- 砍掉不用的插件:在
Plugin Registry 里,把那些咱们暂时用不上的渠道和工具屏蔽掉,减少代码体积。 - 未来展望:等这步验证完美了,咱们下一步就是真正的“硬仗”——把后端的 Node.js 逻辑也逐步用 Rust 重写,那时候,才是真正的“纯血” FinClaw,体积能压缩到最小!
今天的“手搓”实验就到这,虽然过程有点折腾,但看着那个独立的图标,是不是成就感爆棚?咱们下期见,继续死磕 FinClaw!
基本
文件
流程
错误
SQL
调试
- 请求信息 : 2026-07-01 03:41:44 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/821814.html
- 运行时间 : 0.083357s [ 吞吐率:12.00req/s ] 内存消耗:4,835.73kb 文件加载:145
- 缓存信息 : 0 reads,0 writes
- 会话信息 : SESSION_ID=d99a64a6437dcbc7e26e7b0563d92191
- CONNECT:[ UseTime:0.000610s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
- SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000940s ]
- SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000337s ]
- SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000246s ]
- SHOW FULL COLUMNS FROM `set` [ RunTime:0.000564s ]
- SELECT * FROM `set` [ RunTime:0.000204s ]
- SHOW FULL COLUMNS FROM `article` [ RunTime:0.000568s ]
- SELECT * FROM `article` WHERE `id` = 821814 LIMIT 1 [ RunTime:0.000394s ]
- UPDATE `article` SET `lasttime` = 1782848504 WHERE `id` = 821814 [ RunTime:0.001326s ]
- SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000230s ]
- SELECT * FROM `article` WHERE `id` < 821814 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000677s ]
- SELECT * FROM `article` WHERE `id` > 821814 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000399s ]
- SELECT * FROM `article` WHERE `id` < 821814 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000795s ]
- SELECT * FROM `article` WHERE `id` < 821814 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000741s ]
- SELECT * FROM `article` WHERE `id` < 821814 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001256s ]
0.085179s