Files
Genarrative/docs/technical/RUST_WORKSPACE_DEFAULT_BUILD_SCOPE_FIX_2026-04-25.md
kdletters fc54bff62f
Some checks failed
CI / verify (push) Has been cancelled
Keep local Rust dev builds on debug
2026-05-10 04:29:20 +08:00

1.7 KiB
Raw Blame History

Rust Workspace 默认构建范围修复2026-04-25

背景

server-rs 同时包含原生运行的 api-server 与只应由 SpacetimeDB CLI 按 wasm 模块方式构建的 spacetime-module

直接在 server-rs 下执行无参数 cargo buildCargo 会尝试构建 workspace 的全部成员,其中 spacetime-modulecdylib,并依赖 spacetimedb 模块运行时导入函数。该 crate 不能作为 Windows 原生 DLL 链接,链接阶段会报 LNK2019 unresolved external symbol,例如 datastore_insert_bsatnconsole_logtable_id_from_name

决策

  1. cargo build 默认只构建原生服务入口 api-server
  2. spacetime-module 保留为 workspace member便于 cargo check --workspace --all-targets 做类型检查。
  3. spacetime-module 的可发布产物必须继续通过 SpacetimeDB CLI 或仓库发布脚本生成,不走无参数 cargo build 的原生链接路径。

落地

server-rs/Cargo.toml 增加:

[workspace]
default-members = [
    "crates/api-server",
]

验证命令

cd D:\Genarrative\server-rs
cargo build
cargo check --workspace --all-targets
spacetime publish <database> --module-path crates/spacetime-module --build-options="--debug" --yes

后续约束

  • 日常本地编译原生后端用 cargo buildcargo build -p api-server
  • 验证全部 Rust 目标用 cargo check --workspace --all-targets
  • 构建 / 发布 SpacetimeDB 模块用 spacetime publish <database> --module-path server-rs/crates/spacetime-module --build-options="--debug" --yes 或发布脚本,不要用无目标参数的原生 cargo build -p spacetime-module