#actori-web #static #actori #web #http

actori-web-static-files

actori-web 静态文件作为资源支持

1 个不稳定版本

0.3.0 2020年1月20日

#4 in #actori

Unlicense 或 MIT 许可

23KB
356

actori-web 静态文件作为资源支持

双许可协议下使用 MITUNLICENSE

特性

  • 将静态资源嵌入最终二进制文件
  • actori-web 中将静态资源作为目录提供
  • 安装包管理器(npm)依赖项

使用

用例 #1:静态资源文件夹

在您的项目中创建包含静态资源的文件夹(例如 static

cd project_dir
mkdir static
echo "Hello, world" > static/hello

actori-web-static-files 添加到 Cargo.toml 中的依赖项

[dependencies]
actori-web-static-files = "0.3"

[build-dependencies]
actori-web-static-files = "0.3"

将构建脚本添加到 Cargo.toml

[package]
build = "build.rs"

添加 build.rs 并调用资源捆绑

use actori_web_static_files::resource_dir;

fn main() {
    resource_dir("./static").build().unwrap();
}

将生成的代码包含在 main.rs

use actori_web::{App, HttpServer};
use actori_web_static_files;

use std::collections::HashMap;

include!(concat!(env!("OUT_DIR"), "/generated.rs"));

#[actori_rt::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(move || {
        let generated = generate();
        App::new().service(actori_web_static_files::ResourceFiles::new(
            "/static", generated,
        ))
    })
    .bind("127.0.0.1:8080")?
    .start()
    .await
}

运行服务器

cargo run

请求资源

$ curl -v https://127.0.0.1:8080/static/hello
*   Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /static/hello HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.65.3
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 13
< date: Tue, 06 Aug 2019 13:36:50 GMT
<
Hello, world
* Connection #0 to host localhost left intact

用例 #2:package.json - npm 管理的文件夹

在您的项目中创建包含静态资源的文件夹(例如 static

cd project_dir
mkdir static_packages
cd static_packages
echo '{}' > package.json
# install your npm dependencies (here we use fontawesome as an example)
npm install --save-dev @fortawesome/fontawesome-free

将生成的文件夹添加到您的版本控制系统的忽略文件中(此处为 git)

cd project_dir
echo "static_packages/node_modules" >> .gitignore

与第一个用例相同的方式在 Cargo.toml 中添加 dependenciesbuild-dependencies

添加 build.rs 并调用资源捆绑

use actori_web_static_files::npm_resource_dir;

fn main() {
    npm_resource_dir("./static_packages").unwrap().build().unwrap();
}

与第一个用例相同的方式将生成的代码包含在 main.rs

在您的 HTML 中引用资源

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="/static/@fortawesome/fontawesome-free/css/all.css">
    <script defer src="/static/@fortawesome/fontawesome-free/js/all.js"></script>
    <title>Hi</title>
</head>
<body>
    <i class="fas fa-thumbs-up"></i>
</body>
</html>

依赖项

~28MB
~587K SLoC