5 个版本
0.2.4 | 2024 年 3 月 2 日 |
---|---|
0.2.3 | 2024 年 2 月 29 日 |
0.2.2 | 2024 年 2 月 29 日 |
0.2.1 | 2024 年 2 月 29 日 |
0.2.0 | 2024 年 2 月 29 日 |
#592 in GUI
22KB
189 代码行
tauriless
无需安装即可运行类似 Tauri 的应用程序。
警告
此 crate 是一个临时的解决方案,用于在没有安装的情况下运行类似 Tauri 的应用程序。它不是 Tauri 的替代品,也不是长期解决方案。它只是权宜之计。
此外,该库仅在 Windows 上进行了测试,并且不能保证在其他平台上工作。如果您想帮助在其他平台上进行测试,请提交一个问题。
目前,由于依赖于 WebView2
和 vcredist
,该库甚至无法保证二进制文件能在大多数用户的桌面计算机上运行。虽然 WebView2
预安装在 Windows 10 上,但 vcredist
则不是这样。可以通过使用 target-feature=+crt-static
解决对后者的依赖。
用法
use tao::{
event::{Event, StartCause, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
};
use wry::WebViewBuilder;
use tauriless::{command, commands, WebViewBuilderExt};
#[command]
fn argsless_sync_command() {}
#[command]
async fn async_command_with_args(n: i32) -> i32 {
// some async code
n * 2
}
fn main() -> wry::Result<()> {
let rt = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap();
// This allows us to use tokio::spawn inside wry asynchronous custom protocol handlers.
// Since wry doesn't allow us to pass a runtime to the WebViewBuilder, we have to use a global runtime.
let _rt_guard = rt.enter();
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_title("My Tauriless App")
.build(&event_loop)
.unwrap();
// ...
let _webview = WebViewBuilder::new(&window)
// ...
.with_tauriless_commands(commands![argsless_sync_command, async_command_with_args])
.build()?;
event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Wait;
match event {
Event::NewEvents(StartCause::Init) => (),
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
} => *control_flow = ControlFlow::Exit,
_ => (),
}
});
}
消除 Windows 上的 vcredist 依赖
通常,为了在 Windows 计算机上运行 Rust 可执行文件,用户必须安装 vcredist
。请参阅 https://stackoverflow.com/questions/52153676/what-is-the-requirements-for-running-a-rust-compiled-program-on-another-windows。
为了避免这个问题,建议添加以下内容的 .cargo/config.toml
[target.x86_64-pc-windows-msvc]
rustflags = ["-Ctarget-feature=+crt-static"]
[target.i686-pc-windows-msvc]
rustflags = ["-Ctarget-feature=+crt-static"]
[target.i586-pc-windows-msvc]
rustflags = ["-Ctarget-feature=+crt-static"]
这将确保 Rust 编译器链接静态 C 运行时库,因此用户无需安装 vcredist
。它增加了二进制文件的大小[^1],但对于独立应用程序来说,这是一个合理的权衡。
[^1]: 增加的大小是多少?
依赖项
~3–38MB
~507K SLoC