手把手教学:用Tauri给你的博客/官网做个专属桌面客户端(支持Windows/macOS)
当你花费大量精力打造了一个精美的个人博客或作品集网站后,是否想过让访问者获得更沉浸的体验?传统的浏览器标签页总让人感觉"临时"且缺乏专属感。本文将带你用Tauri框架,将现有网站转化为真正原生风格的桌面应用,支持生成Windows的.exe和macOS的.dmg安装包。
与常见的"浏览器套壳"方案不同,我们会深度定制:
- 应用图标与品牌视觉统一
- 原生风格的窗口控件和菜单栏
- 完全隐藏地址栏等浏览器元素
- 自定义窗口尺寸和启动行为
1. 环境准备与项目初始化
1.1 安装必要工具链
确保系统中已安装:
- Rust(Tauri的基础语言环境)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Node.js(18.x或更高版本)
- 系统依赖
- Windows:需安装WebView2(通常已预装)
- macOS:需Xcode命令行工具
xcode-select --install
1.2 创建Tauri项目
推荐使用官方脚手架:
npm create tauri-app@latest在交互式向导中选择:
- 项目模板:
vanilla(最简配置) - UI框架:
none(直接加载外部URL) - 包管理器:根据习惯选择yarn或npm
提示:项目名称请使用逆序域名格式(如
com.yourname.blog),这是桌面应用的通用命名规范。
2. 核心配置:从网页到原生应用
2.1 修改tauri.conf.json
找到src-tauri/tauri.conf.json,关键配置如下:
{ "build": { "devPath": "https://your-blog-url.com", "distDir": "" }, "tauri": { "windows": [{ "title": "Your Blog Name", "width": 1200, "height": 800, "fullscreen": false, "resizable": true, "decorations": false // 隐藏默认标题栏 }] } }高级定制参数:
| 配置项 | 作用说明 | 推荐值 |
|---|---|---|
alwaysOnTop | 窗口是否置顶 | 按需启用 |
skipTaskbar | 是否在任务栏显示 | 适用于后台应用 |
transparent | 窗口透明 | 需要前端配合 |
2.2 注入自定义样式
在项目根目录创建src-tauri/tauri.css:
/* 隐藏滚动条但保留滚动功能 */ html { scrollbar-width: none; -ms-overflow-style: none; } html::-webkit-scrollbar { display: none; } /* 禁用文本选择增强原生感 */ body { user-select: none; }3. 深度优化:让应用更"原生"
3.1 自定义标题栏(macOS风格)
修改src-tauri/main.rs添加:
use tauri::Manager; fn main() { tauri::Builder::default() .setup(|app| { let window = app.get_window("main").unwrap(); // 启用透明和阴影效果 window.set_decorations(false)?; window.set_shadow(true)?; Ok(()) }) .run(tauri::generate_context!()) .expect("error while running tauri application"); }3.2 应用图标制作规范
推荐使用1024x1024PNG源图,通过工具生成多尺寸图标:
npm install -g tauri-icon tauri icon ./icon-source.png生成的图标会自动适配:
- Windows的.ico
- macOS的.icns
- Linux的.png集合
4. 构建与分发
4.1 多平台打包命令
# 开发模式实时预览 npm run tauri dev # 生产环境构建 npm run tauri build构建产物路径:
- Windows:
src-tauri/target/release/bundle/msi/ - macOS:
src-tauri/target/release/bundle/dmg/
4.2 安装包签名(可选但重要)
macOS代码签名示例:
tauri signer sign \ --identity "Apple Developer: Your Name (TEAMID)" \ --icon ./icons/icon.icns \ --bundle-id com.yourdomain.appWindows签名建议:
- 购买正规代码签名证书
- 使用SignTool工具进行签名
- 考虑加入时间戳服务
5. 进阶技巧:提升用户体验
5.1 离线缓存策略
通过Tauri的fsAPI实现本地存储:
// 在前端代码中调用Tauri接口 import { fs } from '@tauri-apps/api'; async function cacheAssets() { await fs.createDir('cache', { recursive: true }); // 保存常用资源到本地 }5.2 自定义协议唤醒
在tauri.conf.json中添加:
"tauri": { "allowlist": { "protocol": { "asset": true, "yourcustomprotocol": true } } }实现类似your-app://的深度链接功能。
6. 常见问题解决方案
窗口白屏问题:
- 检查
devPath是否使用HTTPS - 确保CORS策略允许本地访问
- 在
tauri.conf.json中增加:"security": { "csp": "default-src 'self' https://your-blog-url.com" }
打包体积优化:
- 删除
target/release/build中的中间文件 - 使用UPX压缩可执行文件
upx --best target/release/your_app.exe
实际项目中,我发现最影响用户体验的往往是启动速度。通过预加载关键资源和优化Rust编译参数(如设置codegen-units = 1),可以将冷启动时间控制在1秒内。