#tauri #build-tool #dev-server #wasm #config-file

app wazzup

高度定制的Rust WASM项目构建工具

4个版本

0.4.2 2024年1月29日
0.4.1 2023年8月23日
0.4.0 2023年8月22日
0.3.3 2023年7月8日

#131 in 开发工具

每月22次下载

AGPL-3.0-only

75KB
1.5K SLoC

🍹 WazzUp

我对高度定制的Rust WASM项目构建工具的看法。

用例

本项目旨在实现一个特定目的:完全使用Rust构建WASM项目,这些项目应在浏览器或Tauri中运行。此外,它期望项目布局具有特定的格式,并且在配置选项上极为有限。

这意味着没有JS和Rust WASM的混合,不支持作为库或任何这些组合的构建。仅限Rust项目。

可能需要指出的是,这是我针对特定设置和布局的个人项目。这意味着不太可能接受任何新特性的请求。如果它符合您的用例,那太好了。如果不匹配,嗯... 分支它 😛。

先决条件

以下工具必须在您的系统上预先安装,并且可以通过您的$PATH变量访问

  • 通过rustup安装的Rust。
  • Binaryen工具集,包括wasm-opt
  • Dart-sass编译器。

本项目还依赖于wasm-bindgen,但版本严格绑定到您项目所使用的版本。因此,它将检测正确版本,并通过cargo安装到其自己的缓存文件夹中。这意味着它不会与您通过cargo或包管理器已安装的任何版本冲突。

顺便说一下,我使用Arch

Arch用户可以简单地按以下方式安装所需的依赖项

sudo pacman -S --needed binaryen dart-sass rustup

安装

该项目目前未在crates.io上发布,我不觉得需要提供预编译的二进制文件。相反,只需使用cargo

cargo install --git https://github.com/dnaka91/wazzup.git

布局

为了将配置选项保持到最小,项目必须遵循一定的文件结构,并至少包含以下文件

  • assets/main.sass:任何样式的单一来源。也可以是 main.scssmain.css。必须只引用 assets/{sass,scss,css}/ 文件夹中的文件。
  • assets/sass/:为 main.{sass,scss,css} 文件提供的额外依赖。如果需要,assets/scss/assets/css/ 文件夹可以与其共存。
  • assets/*:剩余的资产,不是样式表。
  • src/:所有 Rust 代码。
  • Cargo.lock:Rust 依赖项的锁定文件,并强制检测使用的 wasm-bindgen 版本。
  • Cargo.toml:典型的 Rust 项目配置文件。
  • index.html:主 HTML 文件。
  • .gitignore:忽略项目中文件的模式,这些文件不会被项目用于文件更改检测。

一个最小化项目看起来像这样

.
├── assets
│  └── main.sass
├── src
│  └── main.rs
├── .gitignore
├── Cargo.lock
├── Cargo.toml
└── index.html

此外,输出被组装在 dist 文件夹中,包括 WASM 二进制文件、JS 接合、样式表、索引页面和任何附加资产。这意味着,.gitignore 至少应包括

dist/
target/

使用方法

应用程序目前有三个主要命令:statusbuilddev

  • status 搜索所有需要的外部程序和必需的项目文件,并以美观的 ASCII 表格报告其状态。
  • build 编译项目及其所有资产到 dist/ 目录。
  • dev 启动本地开发服务器,并在文件更改时重新构建项目。

有关详细信息,只需以 -h/--help 标志运行应用程序。从那时起,使用方法应该是相当直观的。

使用 Tauri 进行设置

要配置 Tauri 以使用 Wazzup,请按如下方式调整您的 tauri.conf.json

{
  "build": {
    "beforeBuildCommand": "wazzup build --release",
    "beforeDevCommand": "wazzup dev",
    "devPath": "https://127.0.0.1:8080",
    "distDir": "../dist"
    // other build config ...
  }
  // other settings ...
}

许可证

本项目根据 AGPL-3.0 许可证(或 https://gnu.ac.cn/licenses/agpl-3.0.html)许可。

依赖关系

~36–50MB
~800K SLoC