Expand description
§Vite Static
Embed Vite chunks into your Rust application and query them individually.
§How it works
Vite Static has Manifest trait, that requires to implement 2 methods and adds methods to query
chunks and resolve output filename (f.e. main.SOMEHASH.js) from manifest key (f.e. main.ts).
Vite Static provides derive feature (enabled by default), that adds Manifest derive to
automatically implement trait.
Also, Vite Static has integrations with web frameworks, to easily serve your static files.
§Usage
-
Add
vite-staticlibrarycargo add vite-static # WIP -
Enable
build.manifestvite option.In
path/to/vite-project/vite.config.js:export default defineConfig({ // <snip> 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"] struct MyViteStatic; -
Use it!
To see more use cases, look into
examples/folder andManifesttrait.
§Features
Without any feature, you have Manifest trait, that helps you with quering chunks.
| Feature | Description |
|---|---|
derive | adds Manifest derive macro (default) |
actix-web | adds ActixFiles service |
axum | WIP |
rocket | WIP |
html | adds HTMLIntegration builder |
§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
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§
- Dynamic
Manifest Chunk - Type alias for dynamic allocated
ManifestChunk. - Static
Manifest Chunk - Type alias for static
ManifestChunk. - Vite
Manifest - Type of
.vite/manifest.json.
Derive Macros§
- Manifest
derive - Derive macro, that generates
Manifesttrait implementation from Vite project and.vite/manifest.json.