仓颉语言实现的cj-tauri框架是什么?为什么值得推荐
cj-tauri 是一个开源在 AtomGit 上的类 Tauri 桌面应用混合开发框架,基于华为仓颉(Cangjie)语言实现。
它的核心理念是将前端 Web 界面技术与原生仓颉后端相结合,为开发者提供高效率、轻量化的跨平台桌面开发解决方案。

核心架构与工作原理
cj-tauri 借鉴了 Tauri 2 的架构设计思想,用仓颉语言完成了完整的后端逻辑与安全桥接实现:
后端逻辑:使用仓颉语言静态编译为原生二进制文件,无需依赖 Node.js 运行时或打包巨大的 Chromium。
前端渲染:基于操作系统自带的原生 WebView 宿主,各平台对位实现:
Windows:Microsoft Edge WebView2
Linux:WebKitGTK
HarmonyOS(鸿蒙 PC):ArkWeb
通信机制(IPC):通过原生的 postMessage 构建双向通信通道(window.CJ_TAURI.invoke 与 listen/emit)。
安全模型:采用权限白名单与 Capability 机制(基于 capabilities/*.json),默认遵循最小权限原则,未放行的命令前端无法调用。
最小代码示例:
// 1) 实现命令:handle 在 worker 线程上执行,返回的 JsonValue 回投给页面
public class GreetCommand <: CommandHandler {
public func handle(cmd: String, args: JsonObject, ipc: IpcContext): JsonValue {
return JsonString("Hello, ${argString(args, "name", "world")}!")
}
}
main(): Int64 {
// 2) 装配:建窗口 + 注册命令;capabilities/ 由 run() 自动扫描
let app = TauriApp()
.window(WindowConfig("hello", 1000, 700))
.register("greet", GreetCommand())
// 3) 启动:run() 自己不返回,窗口关闭后收尾
app.run(HTML)
return 0
}
前端调用:
// 桥在 document-start 注入,页面脚本执行时就已经存在;
// 应用侧仍建议等一次(模板里的 waitForBridge),免得构建形态不同步。
const cj = window.__CJ_TAURI__;
// 调后端命令:与 @tauri-apps/api 同形,返回 Promise
const msg = await cj.invoke("greet", { name: "仓颉" });
// 订阅后端事件(事件名同样要在能力清单的 events 里声明)
cj.listen("tick", e => {
document.querySelector("#out").textContent = e.data;
});
// 插件自带前端命名空间,例如原生文件对话框:
const picked = await cj.dialog.open({ filter: "文本文件|*.txt|所有文件|*.*" });
主要亮点与优势
极轻量化与低资源占用:
交付产物通常为几 MB 到十几 MB 级别的单文件(相比于 Electron 动辄 100MB+ 的安装包和高内存开销,优势显著)。
语言特性与编译体验:
相比于 Rust(Tauri 原生语言),仓颉语言语法更为简洁易懂,编译速度更快、磁盘占用更小,方便安全审计与快速迭代。
支持鸿蒙与国产化技术栈:
适合原本就在仓颉/鸿蒙技术栈上的开发者,方便在桌面端与鸿蒙端共用相同的仓颉后端代码。
健全的工程脚手架与 AI 助手指引:
提供了 cj-tauri CLI,支持从脚手架创建(create)、开发(dev)、构建(build)到环境诊断(doctor)全流程。
沉淀了专门的 AtomCode AI Skills,支持环境自检、构建断言、实机日志取证与踩坑排障。

项目目录概览
my-cj-tauri-app/
├── cj-tauri.json # cj-tauri 核心配置文件(应用元信息、窗口参数、构建选项等)
├── cjpm.toml # 仓颉包管理器配置文件(定义依赖项、包名及构建目标)
├── package.json # 前端 npm/pnpm 依赖配置文件
├── capabilities/ # 安全权限与能力定义目录
│ └── default.json # 默认权限白名单(定义前端允许调用的后端命令)
├── src-cj/ # 仓颉后端代码目录
│ ├── main.cj # 仓颉后端程序入口(注册命令、配置系统托盘/菜单、启动 Webview)
│ ├── config.cj # 应用业务配置逻辑
│ └── commands/ # 开放给前端调用的 IPC 命令模块
│ ├── mod.cj # 命令模块导出
│ └── system.cj # 具体命令实现(如文件读取、原生通知、系统信息获取)
├── src/ # 前端 UI 代码目录(可使用 React / Vue / Svelte / Vanilla)
│ ├── index.html # 主界面 HTML 页面入口
│ ├── main.ts / main.js # 前端逻辑入口
│ ├── App.vue / App.tsx # 主组件
│ └── assets/ # 静态资源(图片、样式表等)
└── dist/ # 前端打包产物目录(构建时自动注入给 Webview 渲染)
代表性示例项目
在官方仓库的 examples/ 目录中,包含了多个实用的靶机应用与示例:
cjnote:内置仓颉 AI 智能体(cjh)的 Markdown 笔记应用,支持流式对话、原生菜单托盘与单文件交付。
music:轻量级桌面音乐播放器,支持榜单拉取、歌词同步滚动与本地存储。
leetcode-gui:桌面版力扣客户端,整合了本地代码判题机、临时文件编译与试题离线管理。
串口示波器 / Modbus 工具:展示原生硬件接口与 Web 界面结合的工业/调试工具。
总结
如果你希望用 Web 技术编写界面,同时要求后端逻辑原生编译、无庞大依赖开销,或者希望在仓颉语言生态中快速构建跨平台桌面应用,cj-tauri 是一个非常值得尝试的轻量框架。
更多推荐


所有评论(0)