侧边栏壁纸
博主头像
云之彼端博主等级

行动起来,活在当下

  • 累计撰写 27 篇文章
  • 累计创建 6 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Tauri结合vite项目实践

Administrator
2023-04-14 / 0 评论 / 0 点赞 / 130 阅读 / 4479 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Tauri的技术背景与原理

Tauri是一个基于Rust和Web技术的框架,用于构建跨平台的本地应用程序。它允许开发人员使用现代Web技术(如HTML、CSS和JavaScript)来构建桌面应用程序,并提供了一个底层的原生窗口管理器和安全性增强功能。同时,它还采用了多线程、异步和高效的C++绑定等技术,使得应用程序在不同操作系统下都能够拥有良好的性能和用户体验。

Tauri的核心原理是将Web技术打包为可执行文件,并将其与底层的原生代码进行交互,从而实现桌面应用程序的构建。它使用了类似于Electron的技术栈,但相较于Electron,Tauri在性能、安全性和易用性等方面都有所提升。

Tauri与vite项目的结合

Vite是一个快速的前端构建工具,它通过ES modules进行打包,可以快速地启动开发环境并生成最优化的生产环境代码。Tauri可以与Vite项目结合起来,用于构建本地应用程序的前端部分。通过这种方式,我们可以使用最新的Web技术构建高性能、本地化的应用程序,同时还可以享受到Vite提供的快速打包和开发服务器等好处。

在结合Tauri和Vite时,需要注意一些细节。例如,需要配置好Tauri的打包脚本,以便正确地打包Vite生成的前端代码。此外,还需要处理好跨域请求等问题,以确保应用程序可以正常运行。

详细的配置可以参考官网的链接
链接地址
以下是一些项目中使用到的配置

import path from 'path';
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';

import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import legacy from '@vitejs/plugin-legacy';
import Unocss from 'unocss/vite';
import {
	presetAttributify,
	presetIcons,
	presetUno,
	transformerDirectives,
	transformerVariantGroup,
} from 'unocss';

const pathSrc = path.resolve(__dirname, 'src');

// https://vitejs.dev/config/
export default defineConfig({
	// prevent vite from obscuring rust errors
	clearScreen: false,
	base: './',
	envDir: 'env',
	envPrefix: ['VITE_', 'TAURI_'],
	resolve: {
		alias: {
			'~/': `${pathSrc}/`,
			'@/': `${pathSrc}/`,
		},
	},
	css: {
		preprocessorOptions: {
			scss: {
				additionalData: `@use "~/styles/element/index.scss" as *;`,
			},
		},
	},
	plugins: [
		legacy({
			targets: ['defaults', 'not IE 11'],
		}),
		vue(),
		Components({
			// allow auto load markdown components under `./src/components/`
			extensions: ['vue', 'md'],
			// allow auto import and register components used in markdown
			include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
			resolvers: [
				ElementPlusResolver({
					importStyle: 'sass',
				}),
			],
			dts: 'src/components.d.ts',
		}),

		// https://github.com/antfu/unocss
		// see unocss.config.ts for config
		Unocss({
			presets: [
				presetUno(),
				presetAttributify(),
				presetIcons({
					scale: 1.2,
					warn: true,
				}),
			],
			rules: [
				[
					'shadow-3xl',
					{ 'box-shadow': '0 20px 120px var(--un-shadow-color, rgba(0, 0, 0, 0.25))' },
				],
			],
			transformers: [transformerDirectives(), transformerVariantGroup()],
		}),
	],
	server: {
		strictPort: true,
		host: '0.0.0.0',
		proxy: {
			'/api': {
				target: 'http://localhost:8080',
				changeOrigin: true,
				rewrite: path => path.replace(/^\/api/, ''),
			},
		},
	},
	build: {
		// Tauri uses Chromium on Windows and WebKit on macOS and Linux
		target: process.env.TAURI_PLATFORM == 'windows' ? 'chrome105' : 'safari13',
		// don't minify for debug builds
		minify: !process.env.TAURI_DEBUG ? 'esbuild' : false,
		// 为调试构建生成源代码映射 (sourcemap)
		sourcemap: !!process.env.TAURI_DEBUG,
	},
});

实践中遇到的问题

自定义拖拽句柄

Tauri是一个用Rust编写的框架,用于构建跨平台原生应用程序。在Tauri中,使用 data-tauri-drag-region 属性可以定义可用于拖动窗口的DOM元素。然而,在实践中,我遇到了这个属性失效的问题。为了解决这个问题,需要按照下面的步骤进行操作:

首先,在 tauri.conf.json 文件中,将 tauri.allowlist.window.startDrag 属性设置为 true,才能使 data-tauri-drag-region 属性生效。这是由于Tauri出于安全考虑禁止DOM元素拖动窗口的默认设置。

其次,我发现将 data-tauri-drag-region 属性定义在最底层的DOM节点上是最好的选择。如果您将其定义在嵌套层次较深的DOM元素上,可能会导致在拖动时出现不必要的困难。因此,确保该属性定义在最底层的DOM元素上可以使窗口的拖动更加流畅和易于实现。

效果

gif

0

评论区