Deterministic, key-based CSV snapshot comparison library and CLI in MoonBit.
| 使用者与问题 | 匹配方式 | 可复现成果 |
|---|---|---|
| 运营核对两次商品目录,检查上架、下架和价格修改 | 商品编号,忽略导出时间 | 新增 1、删除 1、修改 1、未变化 2 |
| 仓管核对多仓库存,同一商品可能出现在多个仓库 | 商品编号+仓库 | 区分 A001/North 与 A001/South,只报告实际变化 |
| 开发者复核部署配置,前导零变化可能影响业务 | 服务+环境 | 明确报告字符串 001 → 1 |
git clone https://github.com/JingLan0v0/MoonBit.git
cd MoonBit$env:MOONBIT_INSTALL_VERSION = '0.10.14+7d59c7ec9'
Invoke-WebRequest https://cli.moonbitlang.cn/install/powershell.ps1 -OutFile "$env:TEMP/install-moonbit.ps1"
& "$env:TEMP/install-moonbit.ps1"curl -fsSL https://cli.moonbitlang.cn/install/unix.sh -o /tmp/install-moonbit.sh
bash /tmp/install-moonbit.sh '0.10.14+7d59c7ec9'
export PATH="$HOME/.moon/bin:$PATH"node scripts/build.mjs
node bin/moonrow.cjs examples/catalog/before.csv examples/catalog/after.csv --key sku --ignore updated_atbefore=4 after=4 added=1 removed=1 changed=1 unchanged=2 changed_cells=1node scripts/verify.mjsmoonrow BEFORE.csv AFTER.csv --key COLUMN [options]| 参数 | 说明 |
|---|---|
| --key COLUMN | 必填,可重复,顺序决定组合主键的顺序 |
| --ignore COLUMN | 可重复,忽略非主键列,例如导出时间 |
| --format text/json/markdown | 默认 text;只能指定一次 |
| -- | 后续参数作为文件路径处理,适合以短横线开头的文件名 |
| --help / -h | 显示帮助 |
| --version | 显示版本 |
| 退出码 | 含义 | 自动化处理 |
|---|---|---|
| 0 | 比较成功,无差异;或帮助/版本命令成功 | 可继续 |
| 1 | 比较成功,发现差异 | 按业务决定是否中断 |
| 2 | 参数、输入格式、主键、资源限制或读文件错误 | 先处理错误 |
node bin/moonrow.cjs examples/inventory/before.csv examples/inventory/after.csv --key sku --key warehouse --ignore exported_at --format json > inventory-diff.json
node bin/moonrow.cjs examples/catalog/before.csv examples/catalog/after.csv --key sku --ignore updated_at --format markdown > catalog-diff.mdimport { "JingLan0v0/moonrow" @moonrow }moon run src/examples/library_usage --target js| 现象 | 原因与处理 |
|---|---|
| MoonRow is not built yet | 源码未构建,先运行 node scripts/build.mjs |
| CI/终端显示退出码 1 | 可能是正常差异;阅读报告,不要把 1 当成输入错误 |
| DUPLICATE_KEY | 主键不唯一,检查数据或增加 --key 组成业务唯一键 |
| SCHEMA_MISMATCH | 两份文件的非忽略列不一致;核对导出结构或明确忽略无关列 |
| UTF8 | 文件不是合法 UTF-8,需要在来源工具中重新导出或转换 |
| LIMIT_* | 超过声明的资源边界;拆分业务数据或使用适合该规模的工具 |
| 安装工具链下载超时 | 网络下载问题;稍后重试官方安装入口。CI 使用隔离安装和备用官方镜像 |
src/ MoonBit 可复用核心及包内单元测试
cli/ 参数解析与报告格式选择
cmd/main/ 命令编排 + 独立 host.mbt 系统适配
examples/library_usage/ 独立库调用示例
bin/ Node 命令启动器
examples/ 三组业务 CSV 与预期结果
scripts/ 构建、工具链、校验、交付打包
tests/ 真实进程测试与独立参考结果
docs/ API、架构、限制、发布与比赛状态
.github/ 双平台 CI、缺陷及 PR 模板type Tablefn compare_csv(before : String, after : String, options : Options, limits? : Limits) -> DiffResult raise MoonRowErrorfn quote_text(value : String) -> StringInstall
Download zipDeterministic, key-based CSV snapshot comparison library and CLI in MoonBit.