#react #typescript #generation #front-end #back-end

app create-rust-app_cli

通过运行一条命令来设置现代 rust+react Web 应用程序

30 个稳定版本 (8 个主要版本)

11.0.0 2024年1月15日
10.0.0 2023年10月28日
9.3.2 2023年10月7日
9.2.0 2023年3月26日
3.0.1 2022年2月6日

开发工具 中排名第 307

每月下载量 41 次

MIT/Apache

1.5MB
28K SLoC

JavaScript 22K SLoC // 0.2% comments Rust 4.5K SLoC // 0.1% comments TSX 1.5K SLoC // 0.0% comments TypeScript 289 SLoC // 0.1% comments

Create Rust App

License: MIT OR Apache-2.0

通过运行一条命令来设置现代 rust+react Web 应用程序。 加入我们的 discord

create-rust-app.dev

要求

  • Rust
  • diesel_cli
    • 对于 SQLite,如果您不想将系统中的 libsqlite3diesel_cli 动态链接,您可以使用以下命令: cargo install diesel_cli --no-default-features --features sqlite-bundled

安装

cargo install create-rust-app_cli

快速入门

create-rust-app my-todo-app
# .. select backend framework, plugins, etc.
# Code-gen resources for your project
cd ./my-todo-app
create-rust-app
# .. select resource type / properties

功能

1. 项目创建

create-rust-app create <project_name>
  • 运行前端和后端只需一条命令: cargo fullstack
  • Rust 后端
    • 以下框架之一
      • actix-web
      • poem (暂时不支持,使用版本 9.2.2: cargo install [email protected])
    • 数据库迁移(使用 diesel.rs)
      • 通过在项目中运行 cargo dsync 生成 diesel 结构和类型(请参阅下面的代码生成部分)。
    • 发送邮件
    • PostgreSQL,SQLite 3.35+ 支持
    • VueJS (前端编译速度极快)
    • SSR 模板,可包含自动代码分割的包
      • /views 文件夹包含所有模板
      • /frontend/bundles 文件夹包含所有可以包含在视图中的包,通过以下方式包含:{{bundle(name="MyBundle.tsx")}}
    • 自动路由到您的单页面应用程序
      • 使用 create_rust_app::render_single_page_application("/app","your_spa.html") (如果您使用 Poem,参数略有不同,示例在函数文档中提供)
  • React 前端(或安装您自己的框架!)
    • Typescript,带有后端类型定义生成(在项目文件夹中运行 cargo tsync;参见下面的代码生成部分)
    • 路由(通过 react-router-dom
    • 生成类型化的 react-query 钩子(运行 $ cd my_project && create-rust-app,然后选择“生成 react-query 钩子”)

可用插件

  • 身份验证(+ 授权)插件

    • 使用简单命令添加基于 JWT 令牌的认证
    • 会话管理:恢复以前的会话,撤销刷新令牌
    • 凭据管理/恢复
    • 电子邮件验证/激活流程
    • 添加前端 UI + react 钩子
    • 添加身份验证服务,以及用户/会话模型
    • 通过 Auth 守卫阻止您的端点
    • 遵循 OWASP 安全最佳实践
    • 开箱即用的 RBAC 权限(为用户分配角色和权限)
  • 社交认证(OIDC)插件

    • 添加基于 OAuth2 的认证(需要身份验证插件)
    • 仅配置一些 OIDC 提供商
    app.app_data(Data::new(AuthConfig {
      oidc_providers: vec![GOOGLE(
      "client_id",
      "client_secret",
      "/success/redirect",
      "/error/redirect",
      )],
    }))
    

    然后,将用户重定向以启动流程!

    <a href={"/api/auth/google"}>Login with Google</a>
    
  • 容器插件

    • 使用 Dockerfile 将 Rust 应用程序容器化为单个镜像
  • 开发插件

    • 通过 localhost:3000/admin 的管理员门户查看您的数据库(仍在开发中)(在开发中)
    • 前端上的 "devbox" 指示后端正在编译或数据库不可达时
    • 此外,devbox 还会显示待处理的迁移,并包含一个 "运行迁移" 按钮
    • 浏览器中的编译错误和迁移检查:[图片链接]
  • 存储插件

    • 添加 Storage 提取器,允许您从兼容 S3 的对象存储上传/下载文件

    • 使用 Attachment::*,无缝地将单个或多个附件添加到您的模型中!

    • 以下是一些示例

      • 将头像添加到用户表中
      let s3_key = Attachment::attach("avatar", "users", user_id, AttachmentData {
          file_name: "image.png",
          data: bytes
      })?;
      
      • 获取附件的URL
      let storage: Storage // retreive this via the appropriate extractor in your frameowrk of choice
      let url = storage.download_uri(s3_key)?;
      

      (注意:有关更多功能,请参阅 Attachment::*Storage::*

  • GraphQL插件

    • 添加了暴露GraphQL所需的所有样板代码
    • 需要认证插件:开箱即用的认证和授权设置
    • localhost:3000/graphql 找到GraphQL游乐场
  • Utoipa插件

    • 使用 utoipa crate 来添加OpenAPI文档,并在SwaggerUI游乐场中提供。
    • https://127.0.0.1:3000/swagger-ui/ 找到游乐场
    • 需要后端为Actix(目前如此)
    • 查看 此页面 了解如何使用各种后端以不同方式记录您的API端点
    • 对认证插件有软依赖
  • 任务插件

    • 用于运行后台任务,目前仅支持actix-web和postgresql
    • 底层使用 fang,并暴露了所有功能。
    • 使用 create_rust_app::tasks::queue() 将任务添加到队列中
    • 使用 cargo run --bin tasks 运行队列
  • 工作空间支持(默认启用,不依赖于功能标志)

    • 允许您以工作空间组织Rust应用程序,并更改指定到各种重要位置的路径的环境变量的默认值。
    • 要将项目组织为工作空间
      • 启用此功能
      • 重构您的代码库到工作空间(请参阅 #194
      • 可选:设置以下环境变量(路径相对于您从 cargo fullstack/backend/run 调用的目录)
        • CRA_MANIFEST_PATH:从工作空间根目录调用时默认为 ./frontend/dist/manifest.json,否则为 ../frontend/dist/manifest.json
        • CRA_FRONTEND_DIR:从工作空间根目录调用时默认为 ./frontend,否则为 ../frontend
        • CRA_VIEWS_GLOB:从工作空间根目录调用时默认为 backend/views/\*\*/\*.html,否则为 views/\*\*/\*.html
      • 请注意,在任何非标准设置中,您都需要将上述环境变量设置为您的项目的正确值,以确保正确的行为。

2. 代码生成以减少样板代码

cargo dsync
  • 运行此命令以在您的 backend/models 文件夹中生成diesel模型结构和查询!
  • 有关dsync文档,请参阅 此处
cargo tsync
  • 运行此命令以生成标记为 #[tsync::tsync] 的 Rust 代码的类型脚本类型。此命令的输出将在这里找到:frontend/src/types/rust.d.ts
  • 查看 tsync 文档 此处
cd my_project && create-rust-app
  • CRUD 代码生成以减少样板代码
    • 构建数据库模型、端点服务文件,并将其连接到您的 /api
  • 为前端生成 react-query 钩子
    • services/ 文件夹中定义的每个处理函数生成一个钩子
    • 之后编辑生成的钩子 -- 除非您删除(或重命名)钩子,否则它们不会重新生成!

教程(旧版)

Gif

贡献

欢迎在问题部分提问和评论!

如果您遇到编译时间慢的问题,请确保模板文件中没有冗余(查找 node_modules 或 TypeScript / Parcel 缓存并删除它们)。此外,您还可以尝试使用 mold 链接器,它也可能提高编译时间。

依赖关系

~10–21MB
~316K SLoC