tauri-solidjs
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseQuick Usage (Already Configured)
快速使用(已配置完成)
Create new Tauri + SolidJS project
创建新的Tauri + SolidJS项目
bash
pnpm create tauri-app openwork --template solid-tsbash
pnpm create tauri-app openwork --template solid-tsDevelopment
开发阶段
bash
pnpm tauri devbash
pnpm tauri devBuild for production
生产环境构建
bash
pnpm tauri buildbash
pnpm tauri buildBuild for mobile
移动平台构建
bash
undefinedbash
undefinediOS
iOS
pnpm tauri ios dev
pnpm tauri ios build
pnpm tauri ios dev
pnpm tauri ios build
Android
Android
pnpm tauri android dev
pnpm tauri android build
undefinedpnpm tauri android dev
pnpm tauri android build
undefinedProject Structure
项目结构
openwork/
packages/
desktop/
src-tauri/
src/
main.rs # Rust entry point
lib.rs # Tauri commands and state
Cargo.toml # Rust dependencies
tauri.conf.json # Tauri configuration
capabilities/ # Permission capabilities
src/
App.tsx # SolidJS root component
index.tsx # Entry point
components/ # UI components
stores/ # Solid stores for state
lib/ # Utilities and OpenCode bridge
index.html # HTML template
package.json # Frontend dependencies
vite.config.ts # Vite configurationopenwork/
packages/
desktop/
src-tauri/
src/
main.rs # Rust 入口文件
lib.rs # Tauri 命令与状态管理
Cargo.toml # Rust 依赖配置
tauri.conf.json # Tauri 配置文件
capabilities/ # 权限能力配置
src/
App.tsx # SolidJS 根组件
index.tsx # 入口文件
components/ # UI 组件
stores/ # Solid 状态管理仓库
lib/ # 工具类与OpenCode桥接层
index.html # HTML 模板
package.json # 前端依赖配置
vite.config.ts # Vite 配置文件Key Dependencies
核心依赖
Frontend (package.json)
前端依赖(package.json)
json
{
"dependencies": {
"solid-js": "^1.8.0",
"@tauri-apps/api": "^2.0.0",
"@tauri-apps/plugin-shell": "^2.0.0",
"@tauri-apps/plugin-fs": "^2.0.0",
"@tauri-apps/plugin-sql": "^2.0.0"
},
"devDependencies": {
"@tauri-apps/cli": "^2.0.0",
"vite": "^5.0.0",
"vite-plugin-solid": "^2.8.0",
"tailwindcss": "^3.4.0"
}
}json
{
"dependencies": {
"solid-js": "^1.8.0",
"@tauri-apps/api": "^2.0.0",
"@tauri-apps/plugin-shell": "^2.0.0",
"@tauri-apps/plugin-fs": "^2.0.0",
"@tauri-apps/plugin-sql": "^2.0.0"
},
"devDependencies": {
"@tauri-apps/cli": "^2.0.0",
"vite": "^5.0.0",
"vite-plugin-solid": "^2.8.0",
"tailwindcss": "^3.4.0"
}
}Backend (Cargo.toml)
后端依赖(Cargo.toml)
toml
[dependencies]
tauri = { version = "2", features = ["shell-open"] }
tauri-plugin-shell = "2"
tauri-plugin-fs = "2"
tauri-plugin-sql = { version = "2", features = ["sqlite"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"toml
[dependencies]
tauri = { version = "2", features = ["shell-open"] }
tauri-plugin-shell = "2"
tauri-plugin-fs = "2"
tauri-plugin-sql = { version = "2", features = ["sqlite"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"Tauri Commands (Rust -> JS)
Tauri 命令(Rust 到 JS)
rust
// packages/desktop/src-tauri/src/lib.rs
use tauri::Manager;
#[tauri::command]
async fn spawn_opencode(prompt: String) -> Result<String, String> {
use std::process::Command;
let output = Command::new("opencode")
.args(["-p", &prompt, "-f", "json", "-q"])
.output()
.map_err(|e| e.to_string())?;
String::from_utf8(output.stdout)
.map_err(|e| e.to_string())
}
#[tauri::command]
fn get_opencode_db_path() -> String {
// Return path to .opencode/opencode.db
dirs::home_dir()
.map(|p| p.join(".opencode/opencode.db").to_string_lossy().to_string())
.unwrap_or_default()
}rust
// packages/desktop/src-tauri/src/lib.rs
use tauri::Manager;
#[tauri::command]
async fn spawn_opencode(prompt: String) -> Result<String, String> {
use std::process::Command;
let output = Command::new("opencode")
.args(["-p", &prompt, "-f", "json", "-q"])
.output()
.map_err(|e| e.to_string())?;
String::from_utf8(output.stdout)
.map_err(|e| e.to_string())
}
#[tauri::command]
fn get_opencode_db_path() -> String {
// 返回 .opencode/opencode.db 的路径
dirs::home_dir()
.map(|p| p.join(".opencode/opencode.db").to_string_lossy().to_string())
.unwrap_or_default()
}Invoking Commands from SolidJS
在SolidJS中调用命令
tsx
import { invoke } from "@tauri-apps/api/core";
async function runTask(prompt: string) {
const result = await invoke<string>("spawn_opencode", { prompt });
return JSON.parse(result);
}tsx
import { invoke } from "@tauri-apps/api/core";
async function runTask(prompt: string) {
const result = await invoke<string>("spawn_opencode", { prompt });
return JSON.parse(result);
}Common Gotchas
常见注意事项
- Tauri 2.x uses instead of
@tauri-apps/api/core.@tauri-apps/api/tauri - Mobile builds require Xcode (iOS) or Android Studio (Android).
- File access requires and capability configuration.
tauri-plugin-fs - SQLite access requires .
tauri-plugin-sql
- Tauri 2.x 使用 而非
@tauri-apps/api/core。@tauri-apps/api/tauri - 移动平台构建需要 Xcode(iOS)或 Android Studio(Android)。
- 文件访问需要 及权限能力配置。
tauri-plugin-fs - SQLite 访问需要 。
tauri-plugin-sql
First-Time Setup (If Not Configured)
首次设置(若未配置)
Install Tauri CLI
安装 Tauri CLI
bash
pnpm add -D @tauri-apps/clibash
pnpm add -D @tauri-apps/cliInitialize Tauri in existing project
在现有项目中初始化 Tauri
bash
pnpm tauri initbash
pnpm tauri initAdd mobile targets
添加移动平台目标
bash
pnpm tauri ios init
pnpm tauri android initbash
pnpm tauri ios init
pnpm tauri android init