如何使用 spacetime dev 创建 SpacetimeDB 项目并开启热重载开发
【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB
如果你要开发一个 SpacetimeDB 数据库模块,并希望保存代码后模块能自动重新构建、重新发布,可以使用spacetime dev命令。它是一个交互式命令,会引导你完成项目创建(项目名、项目路径、客户端类型),随后进入开发模式:本地启动 SpacetimeDB 服务器、创建数据库、构建并发布模块,并持续监视源码文件变化。前提是已经安装了 SpacetimeDB CLI,安装方式见仓库中的 Getting Started 文档 docs/docs/00100-intro/00100-getting-started/00100-getting-started.md。
需要留意:文档明确标注spacetime dev目前是 unstable 命令,未来可能变化。
执行前需要准备什么
- 已安装
spacetimeCLI(文档要求的第一步)。 - 如果后续命令需要登录,SpacetimeDB 使用 GitHub 或 Google 登录认证。按 Getting Started 文档,可以运行
spacetime login,它会打开浏览器让你选择 GitHub 或 Google 登录。文档同时说明:如果跳过这一步,需要登录的命令(如spacetime publish)在执行时会提示你登录——而spacetime dev的工作流包含自动 publish,所以提前登录可以避免中途被打断。
用 spacetime dev 创建项目并进入热重载开发
在一个没有已有 SpacetimeDB 项目的终端目录中运行:
spacetime dev当前目录找不到 SpacetimeDB 项目时,命令会引导你完成三步首次设置:
- 项目名:输入项目名,例如
my-project。 - 项目路径:选择项目文件的创建位置,默认是
./<project-name>。 - 客户端类型,三种选择:
- React:创建带 TypeScript 服务模块的 React 全栈 Web 应用,客户端与服务器都预配置了热重载,文档标注这是 Web 应用的推荐选择。
- Use Template:从内置模板中选择,或用
owner/repo形式 / git URL 克隆一个已有仓库。内置模板包括:basic-ts— 基础 TypeScript 客户端与服务端骨架basic-cs— 基础 C# 客户端与服务端骨架basic-rs— 基础 Rust 客户端与服务端骨架basic-cpp— 基础 C++ 服务端骨架react-ts— React Web 应用 + TypeScript 服务器chat-console-rs/chat-console-cs/chat-react-ts— 完整的聊天示例实现(Rust、C#、TypeScript 各一套)
- None:只创建服务模块,不带客户端代码。需要再选择服务端语言:TypeScript、Rust、C# 或 C++。服务端代码会创建在项目的
spacetimedb/子目录中。
完成设置后进入开发模式,文档列出的行为如下:
- 启动本地 SpacetimeDB 服务器
- 创建一个新的数据库
- 构建并发布模块到该数据库
- 监视源码文件变化
- 你保存改动时自动重新构建并重新发布
- 如果配置了客户端开发服务器,则一并运行它
文档还说明,setup 完成后数据库将可用,地址为 maincloud.spacetimedb.com。
客户端开发服务器如何被拉起
spacetime dev可以自动运行客户端的开发服务器(比如 React 前端),行为由项目根目录的spacetime.json配置:
{ "dev": { "run": "npm run dev" } }客户端命令有四种来源,优先级上 CLI 参数会覆盖配置:
- 从项目文件自动检测(
package.json、Cargo.toml、.csproj) - 在
spacetime.json中配置 - 用 CLI 参数覆盖:
spacetime dev --run "yarn dev" - 完全禁用客户端、只跑服务模块:
spacetime dev --server-only
用客户端模板初始化项目时,会按项目类型自动在spacetime.json中写好默认客户端命令。
如何确认已进入热重载开发
判断依据是文档中列出的行为是否依次发生:命令行显示本地服务器启动、数据库创建、模块构建并发布;之后你修改spacetimedb/下的模块代码并保存,spacetime dev会自动重新构建、重新发布,无需手动执行构建命令。如果配置了客户端命令,客户端开发服务器也应同时运行。
再次进入开发时不需要重复设置:在已包含spacetimedb/目录的项目目录中直接运行spacetime dev,命令会跳过 setup,直接连接数据库并进入文件监视状态。
此外,CLI 参考文档(docs/docs/00300-resources/00200-reference/00100-cli-reference/00100-cli-reference.md)给出的用法是spacetime dev [OPTIONS] [database],其中<DATABASE>是可选的位置参数,指定要发布到的数据库名/身份,不提供时会提示输入;--template参数可用模板 ID 或 GitHub 仓库(owner/repo或 URL)完成项目初始化,--skip-publish、--skip-generate分别跳过发布与生成步骤。
初始化后的项目长什么样
以 TypeScript 项目为例(文档示例):
my-project/ ├── spacetimedb/ # Server module code │ ├── package.json │ ├── tsconfig.json │ └── src/ │ └── index.ts ├── src/ # Client code │ └── module_bindings/ # Generated client bindings ├── package.json ├── tsconfig.json ├── spacetime.json # SpacetimeDB configuration └── README.mdRust、C#、C++ 项目的结构类似:服务端模块都在spacetimedb/下(Rust 为Cargo.toml+src/lib.rs,C# 为StdbModule.csproj+Lib.cs,C++ 为CMakeLists.txt+src/lib.cpp),客户端绑定生成在src/module_bindings/(C++ 项目无客户端代码)。
可选分支:不用交互式流程,手动创建项目
如果你希望更可控地走标准构建/发布流程,可以用spacetime init手动创建,例如 TypeScript:
spacetime init --lang typescript --project-path ./my-project my-project cd my-project其他语言只需替换--lang参数(rust、csharp、cpp)。各语言都会生成配置好的构建文件、带示例模块的入口文件(src/index.ts、src/lib.rs、Lib.cs或src/lib.cpp)以及示例 table 和 reducer 定义。
限制与下一步
spacetime dev是 unstable 命令,参数与交互流程未来可能变化。- 热重载只监视项目源码文件,客户端开发服务器是否运行取决于
spacetime.json配置或--run/--server-only参数,二者互斥于同一目的(一个覆盖、一个禁用)。
创建好模块后,文档给出的下一步是学习 Tables、Reducers、Procedures 等核心概念(参见 docs/docs/00200-core-concepts/00100-databases.md),以及在不依赖开发模式时手动构建并发布模块,参见 docs/docs/00200-core-concepts/00100-databases/00300-spacetime-publish.md。
【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考