#static-site #framework #site #static #ssg #web-page #web

unreact

使用 Handlebars 和 Scss 的 Rust 静态站点生成框架

37 个版本 (6 个破坏性更新)

0.7.0 2023 年 6 月 30 日
0.6.1 2023 年 6 月 27 日
0.5.5 2023 年 4 月 15 日
0.4.2 2023 年 4 月 5 日
0.1.3 2022 年 11 月 9 日

#1830 in 网页编程

MIT 许可证

69KB
1K SLoC

Unreact

使用 Handlebars 和 Scss 的 Rust 静态站点生成框架。

在此处提交问题 here

使用方法

要快速开始,请查看 Unreact Template

将最新版本添加到您的 Cargo.toml 依赖项中

unreact = "*"

使用 "dev" 功能

功能

  • unreact/dev - 创建本地开发服务器以托管文件。
  • unreact/watch - unreact/dev 的超集。还监听文件更改并重新加载服务器。

使用 --dev-d 参数运行,以使 unreact::is_dev() 函数返回 true。只有当 unreact/devunreact/watch 功能启用时才有效。

# Run with `watch` feature, and dev mode
cargo run --features unreact/watch -- --dev

# Run without `watch` (for a production server)
cargo run

开发模式下的热重载

启用 "watch" 功能后,开发服务器将监视资产文件夹(templatesstylespublic)中的更改;可以更改配置)。如果检测到更改,客户端将重新加载。

注意:如果 Rust 文件(在 src 中)被更改,这不会重新加载客户端!(见下文)

开发模式下的路由监控

这将监视 src 中的文件,并重新加载程序。客户端应自动尝试重新连接。

cargo watch -x "run --features unreact/watch -- --dev" -w src -w Cargo.toml

小型示例

创建一个包含单个索引页面的站点

use unreact::prelude::*;

fn main() -> Result<(), Error> {
   // Create the app
   // Using default config, not in dev mode, and an example url
   let mut app = Unreact::new(Config::default(), false, "https://example.com")?;
   // Create an index route
   // This uses the template 'page.hbs' in 'templates/'
   // A json object with a value for 'foo' is passed into the template
   app.index("page", object! { foo: "World!" })?;
   // Compile it!
   app.run()
}

大型示例

use unreact::prelude::*;

#[test]
fn large_example() -> Result<(), Error> {
    // Custom config
    let config = Config {
        strict: true,
        ..Config::default()
    };

    // Run with `is_dev`
    let mut app = Unreact::new(config, is_dev(), "https://example.com")?;

    // Set the global variable 'smiley'
    app.globalize(object! {
        smiley: "(^_^)"
    });

    // Create some routes
    // Note that these methods will never return an error in dev mode. The error will be handled on `app.run()`
    app.index("page", object! {message: "World!"})?
        .not_found("404", object! {})?
        .route_raw("hello", "this is my hello page".to_string())
        .route("article", "other/article", object! {})?;

    // Compiles normally, or opens a dev server and listens if in dev mode
    app.run()
}

与 GitHub Pages 自动编译

.github/workflows/build.yaml

name: Build

on:
    # Triggers the workflow on push or pull request events but only for the "main" branch
    push:
        branches: ["main"]
    pull_request:
        branches: ["main"]

jobs:
    build:
        runs-on: ubuntu-latest

        steps:
            # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
            - name: Checkout 🛎️
              uses: actions/checkout@v3

            # Run compilation script with Rust
            - name: Build 🔧
              run: cargo run

            # Push changes with plugin
            - name: Deploy 🚀
              uses: JamesIves/github-pages-deploy-action@v4
              with:
                  # This must be the build directory
                  folder: ./build

Unreact Icon

依赖项

~9–23MB
~302K SLoC