Expand description
§Vite Static
Embed Vite chunks into your Rust application and query them individually.
Note, that library is unfinished and rough on edges until v1.0.0 release, where it will become stable.
§How it works
Vite Static has Manifest trait and has methods to query chunks and resolve
output filename (g.e. main.HASH.js) from manifest key (g.e. src/main.tsx).
Vite Static provides derive feature (enabled by default), that adds Manifest
derive to automatically implement that trait.
Also, Vite Static has integrations with web frameworks, to easily serve your static files.
§Usage
WARNING
There’s no Windows support. Use unix-like system or WSL :D
-
Add
vite-staticlibrarycargo add vite-static -
Enable
build.manifestvite option.In
path/to/vite-project/vite.config.js:export default defineConfig({ // <snip> base: "/static", // <-- most of the time YOU want this build: { manifest: true, // <-- required } // <snip> }) -
Add
Manifestderiveuse vite_static::Manifest; #[derive(Manifest)] #[vite_dist = "path/to/vite-project/dist"] // relative to Cargo.toml // OR: #[vite_dist = "/absolute/path/to/dist"] // OR: #[vite_dist = "env:ENVIRONMENT_VARIABLE_TO_DIST"] // that specifies relative or absolute path // OR: #[vite_dist = "env:ENVIRONMENT_VARIABLE_TO_DIST|/default/path/to/dist"] // with default value #[base = "/static"] // because we set it in `vite.config.js`! #[cfg_attr(debug_assertions, no_embedding)] // (OPTIONAL, but recommended to speed up debug builds) struct MyViteStatic;Options breakdown:
-
#[vite_dist = ""]specifies path to your vite project’sdist/folder. -
#[base = ""]specifies base path for URLs. -
#[no_embedding]makes macro to NOT embed manifest and chunks. It will lazily read manifest and read specified chunk, when needed.The whole purpose of this library is to embed static, but you can enable it only for debug builds (f.e. by checking
debug_assertionscfg) to speed up builds.
-
-
Use it!
To see more use cases, look into
examples/folder andManifesttrait.
§Features
Without any feature, you have Manifest trait, that helps you query and resolve chunks.
| Feature | Description |
|---|---|
derive | adds Manifest derive macro (default) |
actix-web | adds ActixFiles service |
axum | WIP |
rocket | WIP |
html | adds HTMLIntegration builder |
§Examples
| Filename | Description |
|---|---|
| getting-started.rs | Getting started example. |
| getting-started-no-yap.rs | Getting started example, no yapping. |
| integrations/actix-web.rs | actix-web feature example. |
| integrations/html.rs | html feature example. |
| options/base.rs | #[base = "..."] derive option example. |
| options/no-embedding.rs | #[no_embedding] derive option example (with explanation) |
§Q&A
-
Q: Why should am I use this library, over vite-rs?
A: It depends on your needs.
You should use
vite-rs, when you have frontend built with Vite, including routing and HTML, and you need a library to embed whole frontend into application.You should use
vite-static, when you have assets (JS, CSS, PNGs, etc.) built with Vite, but you use HTML templating to build faster and lighter websites, so you need to embed only assets.Because of
vite-staticuse case and lightness, it doesn’t have development server and auto-runningnpm buildin derive macro. -
Q: Why it doesn’t run
npm buildautomatically?A: Because it only adds problems.
First, it will run
npm buildon every rust compilation and will require adding additional options.Second, it will make configuration only harder. For example you use nix. While building release, you build vite project in separate derivation, but during development you would use automatic
npm build.So it’s simpler to just open 2 terminals: first to watch and re-run
cargo run, second to runvite watch.
§Credits
- vite-rs - good library to embed entire frontend into rust application
- actix-web-static-files -
ActixFilesservice implementation is partially taken from this crate
Modules§
- parsing
- Vite manifest parsing module.
Structs§
- Actix
Files actix-web - Actix service for serving Vite Static.
- Actix
Files Service actix-web - Internal implementation of
ActixFilesservice. - Html
Integration html - HTML integration.
- Manifest
Chunk - Vite manifest chunk.
Traits§
- Manifest
- Trait, that helps query chunks in Vite manifest.
Type Aliases§
- DynManifest
- Dynamic boxed manifest.
- Vite
Manifest - Type of
.vite/manifest.json.
Derive Macros§
- Manifest
derive - Derive macro, that generates
Manifesttrait implementation from Vite project and.vite/manifest.json.