在 Tauri 应用的前端中,经常需要根据运行环境或操作系统执行不同逻辑——比如开发时连接本地后端、生产时使用云接口;或者针对 Windows、macOS、Linux 的特有行为进行调整。Tauri 提供了一套简洁的方式来完成这些判断,无需手动维护环境变量。
判断开发环境还是生产环境
在 Tauri 中,最可靠的方法是检查 window.__TAURI_INTERNALS__ 是否包含开发服务器的地址。当你在 tauri dev 模式下运行时,前端由 Vite 等工具的热更新服务器提供,Tauri 会把开发服务器地址注入到该对象中。你可以封装一个工具函数:
export function isDev(): boolean {
return window.__TAURI_INTERNALS__?.devUrl !== undefined;
}
或者利用 Tauri 的 @tauri-apps/api 中提供的 invoke 调用一个始终存在的命令来探测(不推荐作为主要手段)。更好的做法是使用环境变量:在 tauri.conf.json 的 build 字段中,有一个 devUrl 属性,但前端无法直接读取它。不过你可以使用 Rust 后端的 tauri::is_dev() 函数通过 IPC 暴露:
#[tauri::command]
fn is_dev() -> bool {
tauri::is_dev()
}
前端调用:
import { invoke } from '@tauri-apps/api/tauri';
invoke('is_dev').then(dev => console.log(dev));
但更轻量的方式是利用构建时的全局变量。Vite 项目中可以通过 import.meta.env.DEV 判断,但注意这只反映前端构建模式,未必与 Tauri 的 dev 模式完全同步(通常情况下是一致的)。为了绝对准确,建议使用注入标志:在 vite.config.ts 中,可以通过 Tauri 的 CLI 侦测并设置 TAURI_DEV,但最简单的仍是上述 __TAURI_INTERNALS__ 方案,它零配置且直接映射 Tauri 的运行模式。
平台识别
识别当前应用运行在哪个操作系统上,可以使用 @tauri-apps/plugin-os 插件(Tauri v2 推荐)或内置的 @tauri-apps/api/os 模块(v1)。安装插件:
pnpm add @tauri-apps/plugin-os
使用:
import { platform } from '@tauri-apps/plugin-os';
const os = platform(); // 'darwin' | 'linux' | 'windows' | 'android' | 'ios'
const isWindows = os === 'windows';
const isMac = os === 'darwin';
const isLinux = os === 'linux';
platform() 返回的值是 Rust 的 std::env::consts::OS 取值,与 Node.js 的 process.platform 对齐(macOS 为 darwin)。你也可以调用 arch() 获取 CPU 架构,例如 x86_64 或 aarch64。
如果你不想引入额外插件,可以通过 invoke 调用自定义 Rust 命令:
#[tauri::command]
fn get_platform() -> String {
std::env::consts::OS.to_string()
}
前端:
const platform = await invoke('get_platform');
但使用插件更简洁,且插件还提供了 type()、version() 等详细系统信息。
实用示例:条件性加载资源
const platform = await import('@tauri-apps/plugin-os').then(m => m.platform());
if (platform === 'windows') {
// 加载 Windows 特有图标
} else if (platform === 'darwin') {
// 隐藏窗口菜单,因为 macOS 会自动显示
}
结合环境判断,你可以在开发时模拟不同平台的效果,或调试仅在特定系统出现的 bug。
一句话总结:通过 __TAURI_INTERNALS__.devUrl 判断开发模式,通过 @tauri-apps/plugin-os 的 platform() 识别操作系统,这两步足以覆盖绝大多数前端自适应需求。