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 次
1.5MB
28K SLoC
Create Rust App
通过运行一条命令来设置现代 rust+react Web 应用程序。 加入我们的 discord。
要求
- Rust
diesel_cli
- 对于 SQLite,如果您不想将系统中的
libsqlite3
与diesel_cli
动态链接,您可以使用以下命令:cargo install diesel_cli --no-default-features --features sqlite-bundled
。
- 对于 SQLite,如果您不想将系统中的
安装
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 钩子”)
- Typescript,带有后端类型定义生成(在项目文件夹中运行
可用插件
-
身份验证(+ 授权)插件
- 使用简单命令添加基于 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 应用程序容器化为单个镜像
-
开发插件
-
存储插件
-
添加
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插件
-
任务插件
- 用于运行后台任务,目前仅支持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/
文件夹中定义的每个处理函数生成一个钩子 - 之后编辑生成的钩子 -- 除非您删除(或重命名)钩子,否则它们不会重新生成!
- 为
教程(旧版)
贡献
欢迎在问题部分提问和评论!
如果您遇到编译时间慢的问题,请确保模板文件中没有冗余(查找 node_modules
或 TypeScript / Parcel 缓存并删除它们)。此外,您还可以尝试使用 mold 链接器,它也可能提高编译时间。
依赖关系
~10–21MB
~316K SLoC