作为一个跨平台的桌面开发框架,tauri在其中承担后端的角色,并且支持与任意前端框架即成。
这里提到的后端,并不是web应用的后端,而是指桌面应用的后端,即负责渲染前端与平台交互的后端,这个概念要先区分出来。
为了方面前端的开发,这里直接选用nextjs作为前端框架。
目前官方提供的有项目开发的脚手架,执行npm create tauri-app@latest按照指引即可创建出项目。不过目前还不支持nextjs,因此这里我们使用tauri cli来手动创建工程。
创建并初始化nextjs工程
npx create-next-app@latest按照指引初始化好nextjs工程。
安装tauri cli工具
npm install -D @tauri-apps/cli@latest初始化tauri
也就是创建tauri后端工程,就是src-tauri这个目录
npx tauri init同样按照指引即可完成tauri后端的初始化
配置nextjs和tauri
使用nextjs+tauri的方案还需要对两者做一些配置
- tauri不支持基于服务端的方案,nextjs需要设置静态导出。一个示例配置如下
// next.config.ts
import type { NextConfig } from "next";
const isProd = process.env.NODE_ENV === 'production';
const internalHost = process.env.TAURI_DEV_HOST || 'localhost';
const nextConfig: NextConfig = {
// 确保 Next.js 使用 SSG 而不是 SSR
// https://nextjs.org/docs/pages/building-your-application/deploying/static-exports
output: 'export',
// 注意:在 SSG 模式下使用 Next.js 的 Image 组件需要此功能。
// 请参阅 https://nextjs.org/docs/messages/export-image-api 了解不同的解决方法。
images: {
unoptimized: true,
},
// 配置 assetPrefix,否则服务器无法正确解析您的资产。
assetPrefix: isProd ? undefined : `http://${internalHost}:3000`,
};
export default nextConfig;这种最终build出来的时候会将制品生成到out目录下。
- tauri配置中的前端目录和build结果存放的目录保持一致。如果按照前面流程默认创建下来的话其实就是out目录
// tauri.conf.json
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "my-app",
"version": "0.1.0",
"identifier": "com.tauri.dev",
"build": {
"frontendDist": "../out",
"devUrl": "http://localhost:3000",
"beforeDevCommand": "npm run dev",
"beforeBuildCommand": "npm run build"
},
...
}运行tauri
npx tauri dev现在就会成功打开一个桌面程序了。 也可以在package.json将tauri命令加入到脚本当中
"scripts": {
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start",
"lint": "next lint",
"tauri": "tauri"
},这样就可以统一通过npm命令执行了npm run tauri dev。
接着就可以基于nextjs和tauri进行开发了