Tauri
构建跨端桌面应用程序。具备 更小、更快、更平安
的个性。
tauri 相较于 electron 构建的利用更快、更小。同样的hello world我的项目,electron 打包后体积64M
,而 tauri 打包后体积4M
。
因为 electron 应用了体积宏大的 Chromium 内核和Nodejs。所以构建慢,打包后体积大。
目前在github下面star达到53K。而且增长趋势很快。
开始之前
在开发之前您须要装置 Rust 及其他零碎依赖。
- "C++ 生成工具" 和 Windows 10 SDK。
- Tauri 须要 WebView2 能力在 Windows 上出现网页内容,所以您必须先装置WebView2。
- Rust
https://tauri.app/zh/v1/guide...
实现了以上几个步骤,接下来就能欢快的开发了。
tauri初始化我的项目
npm create tauri-app
如下图:tauri提供了十分多的前端框架供选择。
运行调试
tauri dev
打包构建
tauri build
上面就介绍通过封装 WebviewWindow
构建多窗口。
import { WebviewWindow } from '@tauri-apps/api/window'const webview = new WebviewWindow('theUniqueLabel', { url: 'index.html',})webview.once('tauri://created', function () { // webview window successfully created})webview.once('tauri://error', function (e) { // an error happened creating the webview window})
createWin({ label: 'Home', title: '主页', url: '/home', width: 800, height: 600,})
新建 windows 目录,用来封装多窗口及调用办法。
/** * @desc 封装新开多窗体 * @author: YXY Q:282310962 * @time 2022.10 */import { WebviewWindow, appWindow, getAll, getCurrent } from '@tauri-apps/api/window'import { relaunch, exit } from '@tauri-apps/api/process'import { emit, listen } from '@tauri-apps/api/event'import { setWin } from './actions'// 零碎参数配置export const windowConfig = { label: null, // 窗口惟一label title: '', // 窗口题目 url: '', // 路由地址url width: 900, // 窗口宽度 height: 640, // 窗口高度 minWidth: null, // 窗口最小宽度 minHeight: null, // 窗口最小高度 x: null, // 窗口绝对于屏幕左侧坐标 y: null, // 窗口绝对于屏幕顶端坐标 center: true, // 窗口居中显示 resizable: true, // 是否反对缩放 maximized: false, // 最大化窗口 decorations: false, // 窗口是否无边框及导航条 alwaysOnTop: false, // 置顶窗口}class Windows { constructor() { this.mainWin = null } // 获取窗口 getWin(label) { return WebviewWindow.getByLabel(label) } // 获取全副窗口 getAllWin() { return getAll() } // 创立新窗口 async createWin(options) { const args = Object.assign({}, windowConfig, options) // 判断窗口是否存在 const existWin = getAll().find(w => w.label == args.label) if(existWin) { if(existWin.label.indexOf('main') == -1) { await existWin?.unminimize() await existWin?.setFocus() return } await existWin?.close() } // 创立窗口对象 let win = new WebviewWindow(args.label, args) // 是否最大化 if(args.maximized && args.resizable) { win.maximize() } // 窗口创立结束/失败 win.once('tauri://created', async() => { console.log('window create success!') ... }) win.once('tauri://error', async() => { console.log('window create error!') }) } // 开启主过程监听事件 async listen() { // 创立新窗体 await listen('win-create', (event) => { console.log(event) this.createWin(JSON.parse(event.payload)) }) // 显示窗体 await listen('win-show', async(event) => { if(appWindow.label.indexOf('main') == -1) return await appWindow.show() await appWindow.unminimize() await appWindow.setFocus() }) // 暗藏窗体 await listen('win-hide', async(event) => { if(appWindow.label.indexOf('main') == -1) return await appWindow.hide() }) // 退出利用 await listen('win-exit', async(event) => { setWin('logout') await exit() }) // 重启利用 await listen('win-relaunch', async(event) => { await relaunch() }) // 主/渲染过程传参 await listen('win-setdata', async(event) => { await emit('win-postdata', JSON.parse(event.payload)) }) }}export default Windows
import { WebviewWindow } from '@tauri-apps/api/window'import { emit } from '@tauri-apps/api/event'// 创立新窗口export async function createWin(args) { await emit('win-create', args)}// 获取窗口export async function getWin(label) { return await WebviewWindow.getByLabel(label)}/** * @desc 设置窗口 * @param type {string} 'show'|'hide'|'close'|'min'|'max'|'max2min'|'exit'|'relaunch' */export async function setWin(type) { await emit('win-' + type)}// 登录窗口export async function loginWin() { await createWin({ label: 'Login', title: '登录', url: '/login', width: 320, height: 420, resizable: false, alwaysOnTop: true, })}// ...
通过如下形式即可疾速创立多窗口。
const createManageWin = async() => { createWin({ label: 'Manage', title: '治理页面', url: '/manage', width: 600, height: 450, minWidth: 300, minHeight: 200 })}const createAboutWin = async() => { createWin({ label: 'About', title: '对于页面', url: '/about', width: 500, height: 500, resizable: false, alwaysOnTop: true })}
只须要传入配置参数即可。大家还能够进行进一步优化封装办法。
OK,基于tauri+vue3创立多窗口就先分享到这里。
Electron-Vue3-MacUI仿MacOs桌面治理框架
Vue3.0+Electron仿QQ聊天室|electron跨平台聊天利用