
Rerun 开发工具聚合 crate re_dev_tools设计思路、命令解析与新增工具指南【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerunre_dev_tools是 Rerun 仓库中一个专门用于承载各类小型 Rust 开发脚本的聚合 crateCombined development utilities。它将构建 Web Viewer、生成示例 manifest、维护文档搜索索引等开发期工具统一收纳并通过pixi run dev-tools这一统一入口对外暴露。阅读本篇你将掌握该 crate 的模块结构、三大子命令build-web-viewer、build-examples、search-index的完整参数与底层构建流程并学会如何在src下新增一个开发工具并接入命令行分发。为什么需要这样一个聚合 crateRerun 的构建体系十分庞大涉及 Wasm 构建、示例批量运行、文档索引等多个环节。如果每个小工具都单独建一个 crate会无谓地增加工作区中的 crate 数量也难以统一查看和管理。原 README 明确给出了这个 crate 的设计动机见 crates/build/re_dev_tools/README.md合并小脚本把较小的 Rust 脚本集中放在这一个 crate 里避免开发工具类 crate 数量膨胀统一视角让开发者能够在一处概览所有用 Rust 编写的构建工具单一入口通过pixi run dev-tools --help查看全部可用工具。从 Cargo.toml 可以看到这个 crate 被标记为publish false不发布到 crates.io其依赖也集中在开发工具所需的能力上argh命令行解析、cargo_metadata读取工作区元数据、roxmltree解析 XML、toml/serde/serde_json配置与数据序列化、ureqHTTP 请求用于与 Meilisearch 等本地服务通信、wasm-bindgen-cli-support生成 Wasm 的 JS 绑定等。这些依赖组合本身就从侧面印证了该 crate 的职责边界构建脚本、文档索引与 Web 资产生成。快速上手统一入口与三大子命令在仓库根目录执行以下命令即可查看全部工具及其帮助信息pixi run dev-tools --help其中pixi run dev-tools在 pixi.toml 中被定义为dev-tools cargo run --locked -p re_dev_tools --即通过 Cargo 直接运行re_dev_tools这个包--之后的所有参数都会被透传给程序本身。--locked保证使用锁定的依赖版本保证开发环境可复现。查看 main.rs 的源码可以看到命令行分发使用argh完成顶层TopLevel结构体通过#[argh(subcommand)]枚举定义了三个子命令子命令对应模块职责build-examplesbuild_examples收集并构建全部示例Python / Rust / C / Notebook产出.rrd文件或示例 manifestbuild-web-viewerbuild_web_viewer将re_viewer编译为 Wasm并生成对应的.js绑定search-indexbuild_search_index把文档与示例索引到本地 Meilisearch 实例并提供终端 REPL 检索main函数按枚举值将控制权分发给各模块的main任何错误统一以anyhow::Result向上抛出match args.cmd { Commands::BuildExamples(args) build_examples::main(args), Commands::SearchIndex(args) build_search_index::main(args), Commands::BuildWebViewer(args) build_web_viewer::main(args), }子命令一build-web-viewer——Web Viewer 的完整构建流水线build-web-viewer是三个子命令中最重的一个它负责把 Rerun 的re_viewer编译成浏览器可加载的.wasm与.js绑定。子工具自带的 README 给出了两条典型用法# 默认 debug 构建 pixi run dev-tools -- build-web-viewer # release 构建并保留调试符号 pixi run dev-tools -- build-web-viewer --release -g需要说明的是该 README 中命令在 argh 定义下等价于直接调用子命令pixi run dev-tools -- build-web-viewer ...与pixi run dev-tools build-web-viewer ...都能工作区别只在于--之后的参数不会与 pixi 自身的选项混淆。命令行参数详解参数定义位于 build_web_viewer/mod.rs全部来自argh派生结构体参数别名类型默认值说明--release-switch无以web-releaseprofile 编译并运行wasm-opt优化与--debug互斥--debug-switch无以 debug 模式编译且不运行wasm-opt与--release互斥--debug-symbols-gswitch关闭即使 release 构建也保留调试符号便于 panic 时的调用栈和浏览器内 Wasm 性能分析--target-toptionbrowser构建目标browser/module/no-modules-base后者专供rerun_js内做后处理--out-ooption见下文输出目录为相对 Cargo 工作区根的路径--features-Foptionanalytics以逗号分隔的特性列表透传给re_viewer的 Wasm 构建--no-default-features-switch关闭构建re_viewerWasm 时排除默认特性--timings-switch关闭生成 Cargo 构建耗时报告输出到target-dir/cargo-timings/其中--release与--debug必须二选一源码中对此有显式校验——两者都未设置或同时设置都会直接报错见 build_web_viewer/mod.rsExactly one of --release or --debug must be set默认输出目录并非当前目录而是写死的crates/top/re_web_viewer_server/web_viewer见 build_web_viewer/lib.rs这样构建产物可以直接被re_web_viewer_server使用——事实上该子命令正是被re_web_viewer_server的build.rs在构建期调用见 build_web_viewer/README.md 的说明。底层构建三步走从 build_web_viewer/lib.rs 的build函数可以还原完整的构建流水线编译 Rust 到 Wasm以re_viewer为包、--targetwasm32-unknown-unknown为目标执行cargo build并把产物放到独立的target/wasm目录嵌套在默认 target 目录内这样cargo clean也能一并清理。这里特意移除了环境中的RUSTFLAGS与CARGO_ENCODED_RUSTFLAGS防止宿主机专属的链接参数泄漏到 Wasm 构建中并显式加载.cargo/config.toml。生成 JS 绑定通过wasm_bindgen_cli_support::Bindgen读取编译出的.wasm按目标类型生成绑定——browser目标使用--no-modules且不输出 TypeScript 类型module目标则输出模块化绑定并附带.d.ts。一个常见的失败信息是cannot import from modules (\env) with --no-modules这通常意味着某个依赖调用了std::time::Instant::now()之类的宿主环境 API源码在报错提示中给出了用wasm2wat定位env 导入的方法。wasm-opt 优化仅 releaserelease 构建会调用wasm-opt -O2做体积与性能优化开启reference-types、simd、bulk-memory、nontrapping-float-to-int、multivalue等特性与.cargo/config.toml中-Ctarget-feature的编译选项保持一致JS 加载器通过 SIMD 特性检测来决定是否加载该 Wasm。若-g被指定则保留调试符号否则--strip-debug剥离符号。源码注释明确指出wasm-opt需要预先安装 binaryen可通过apt/brew/dnf安装。子命令二build-examples——示例收集、运行与 manifest 生成build-examples负责扫描仓库中所有示例并生成示例页面所需的索引。模块开头的文档注释见 build_examples/mod.rs说明了核心机制通过检查示例README.mdfrontmatter 中是否设置了channel来识别可运行的示例。channel的可选值及其语义channel含义main简单/快速的示例在每次 PR 与main分支上构建nightly较重的示例每天构建一次此外示例还可以通过 frontmatter 中的build_args字符串数组指定运行时参数。对应源码中 example.rs 的Example::load每个示例会从examples/语言目录/名字/README.md解析出标题、描述、标签、缩略图、build_args、allow_warnings、include_in_manifest等元数据。语言目录的映射关系也在 example.rs 中定义Language目录相对examples/扩展名RustrustrsPythonpythonpyCcppcppNotebooknotebookipynbbuild-examples本身还包含 5 个子子命令见 build_examples/mod.rsinstall安装示例运行环境、rrd运行示例并产出.rrd录制文件、manifest生成示例索引 manifest、snippets处理文档代码片段、notebook处理 notebook 示例。在 pixi.toml 中它被包装为独立任务build-examples uv run cargo run --locked -p re_dev_tools -- build-examples子命令三search-index——用 Meilisearch 索引全部文档与示例search-index负责把仓库中的文档和示例收集起来上传到本地 Meilisearch 实例完成全文索引模块说明见 build_search_index/mod.rs。它内部再分两个子命令build一次性完成 ingest 索引与repl启动一个终端交互式检索客户端。子工具自带的 README 给出了三步标准流程# 1. 启动本地 meilisearch 实例 pixi run meilisearch # 2. 索引仓库中的文档内容 pixi run search-index build # 3. 针对本地 meilisearch 启动交互式 REPL pixi run search-index repl其中pixi run meilisearch在 pixi.toml 中被定义为在localhost:7700启动开发模式的 Meilisearch 实例master key 为test数据与快照分别存放在meilisearch/data.ms等目录下可整体删除以彻底重置pixi run search-index则对应 pixi.toml 中的定义等价于运行re_dev_tools的search-index子命令。build 与 repl 的公共参数两个子命令共享同一组配置参数定义见 build.rs 与 repl.rs参数类型默认值说明index_name位置参数positionaltemp要创建/查询的 Meilisearch 索引名--urloptionhttp://localhost:7700Meilisearch 地址--master-keyoptiontestMeilisearch master key需同时具备读与写权限--release-versionoption无用于生成文档 URL 的发布版本号--ingest仅 replswitch关闭启动 REPL 前先执行一次文档收集与索引默认值常量统一收敛在 build_search_index/mod.rs 中const DEFAULT_URL: str http://localhost:7700; const DEFAULT_KEY: str test; const DEFAULT_INDEX: str temp;build的执行逻辑非常简单直接见 build.rs连接 Meilisearch → 运行ingest::run收集文档覆盖文档、示例、各语言 API 参考→ 写入指定索引。repl则在交互循环中不断读取标准输入逐行把查询发送给本地索引并打印结果若传入--ingest会先执行与build相同的收集流程再进入交互见 repl.rs。仓库中 ingest 目录下的cpp.rs、docs.rs、examples.rs、python.rs分别对应不同语言与文档来源的收集器。新增一个开发工具两步接入原 README 给出了新增工具的全部步骤这也是把开发脚本沉淀进统一工具链的标准姿势在src下新建一个文件夹放入你的工具实现。参考现有布局一个子工具通常包含一个mod.rs定义argh参数结构体与main分发函数以及按需拆分的实现文件如build_examples下按example、manifest、rrd、snippets、notebook等职责分文件。在 main.rs 中添加新的枚举条目mod声明新模块后在Commands枚举中增加一个#[argh(subcommand)]变体并在match中把解析出的参数交给新模块的main。由于解析与分发完全由argh的派生宏与顶层枚举驱动新增一个子命令不需要改动其他任何代码。完成上述两步后pixi run dev-tools --help会自动列出新工具pixi run dev-tools 新工具名 --help即可查看其参数说明。与 pixi 任务体系的集成re_dev_tools不要求开发者记住一长串cargo run -p re_dev_tools -- ...前缀——pixi.toml 中已把高频用法封装为语义化任务pixi 任务底层命令用途dev-toolscargo run --locked -p re_dev_tools --通用入口后面直接跟子命令build-examplesuv run cargo run --locked -p re_dev_tools -- build-examples构建示例与 manifestsearch-indexuv run --group docs cargo run --locked -p re_dev_tools -- search-index文档索引附 docs 依赖组rerun-build-webcargo run -p re_dev_tools -- build-web-viewer --no-default-features --features analytics,map_view --debugdebug 构建 Web Viewerrerun-build-web-clirerun-build-web之后追加cargo build --package rerun-cli --no-default-features --features web_viewer构建 Web Viewer 及其 CLIrerun-build-web-release同上但以--release构建release 构建 Web Viewermeilisearch本地 Meilisearch 实例启动命令为search-index提供后端服务从 pixi.toml 的任务定义还可以看到build-web-viewer子命令可以通过--features analytics,map_view与--no-default-features的组合来裁剪re_viewer的功能集这验证了前面参数表中特性透传机制的实际用途。小结re_dev_tools是 Rerun 构建体系中一个典型的工具聚合器设计上通过单一 crate 收纳全部 Rust 开发脚本以避免 crate 数量膨胀入口上通过pixi run dev-tools统一暴露实现上以argh子命令枚举驱动三大功能模块——build-web-viewerWasm 构建 绑定生成 优化三步流水线、build-examples基于 README frontmatter 的示例收集与 manifest 生成、search-index面向 Meilisearch 的文档索引与终端 REPL。理解它的结构与接入方式等于掌握了 Rerun 开发期工具链的扩展入口无论是为 CI 添加自定义构建步骤还是为自己的开发流程沉淀脚本都可以在此基础上快速落地。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考