#desktop-applications #tauri #event-loop #events #command #wry #vcredist

tauriless

无需安装即可运行类似 Tauri 的应用程序

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

MIT/Apache

22KB
189 代码行

tauriless

Crates.io Downloads Documentation License

无需安装即可运行类似 Tauri 的应用程序。

警告

此 crate 是一个临时的解决方案,用于在没有安装的情况下运行类似 Tauri 的应用程序。它不是 Tauri 的替代品,也不是长期解决方案。它只是权宜之计。

此外,该库仅在 Windows 上进行了测试,并且不能保证在其他平台上工作。如果您想帮助在其他平台上进行测试,请提交一个问题。

目前,由于依赖于 WebView2vcredist,该库甚至无法保证二进制文件能在大多数用户的桌面计算机上运行。虽然 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