Skip to main content

Crate vite_static

Crate vite_static 

Source
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

  1. Add vite-static library

    cargo add vite-static # WIP
  2. Enable build.manifest vite option.

    In path/to/vite-project/vite.config.js:

    export default defineConfig({
        // <snip>
        build: {
            manifest: true, // <-- required
        }
        // <snip>
    })
  3. Add Manifest derive

    use 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;
  4. Use it!

    To see more use cases, look into examples/ folder and Manifest trait.

§Features

Without any feature, you have Manifest trait, that helps you with quering chunks.

FeatureDescription
deriveadds Manifest derive macro (default)
actix-webadds ActixFiles service
axumWIP
rocketWIP
htmladds 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-static use case and lightness, it doesn’t have development server and auto-running npm build in derive macro.

  • Q: Why it doesn’t run npm build automatically?

    A: Because it only adds problems.

    First, it will run npm build on 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 run vite watch.

    KISS principle!

§Credits

  • vite-rs - good library to embed entire frontend into rust application
  • actix-web-static-files - ActixFiles service implementation is partially taken from this crate

Structs§

ActixFilesactix-web
Actix service for serving Vite Static.
ActixFilesServiceactix-web
Internal implementation of ActixFiles service.
HtmlIntegrationhtml
HTML integration.
ManifestChunk
Vite manifest chunk.

Traits§

Manifest
Trait, that helps query chunks in Vite manifest.

Type Aliases§

DynamicManifestChunk
Type alias for dynamic allocated ManifestChunk.
StaticManifestChunk
Type alias for static ManifestChunk.
ViteManifest
Type of .vite/manifest.json.

Derive Macros§

Manifestderive
Derive macro, that generates Manifest trait implementation from Vite project and .vite/manifest.json.