切换手册章节
动手验证一张报销回执的生命周期
你会亲眼看到四笔虚构报销只留下两条回执,再验证行政组和门店组怎样使用同一个“审批规则”名称。两段程序都在本地 Node.js 运行,零模型调用。
本篇目录 5 节
01
第一步,打开练习包里的 cordis-demo
- 解压练习包,进入 cordis-demo 文件夹。在这里打开终端,可看到 demo.mjs、scopes.mjs、package.json、package-lock.json 和 README.md。第一次做可先直接读下一节的四行预期。
- 运行 node --version 检查 Node.js,运行 npm ci --ignore-scripts --no-audit --no-fund 安装锁定依赖。首次安装需能访问 npm。示例验证环境为 Node.js v24.22.1、npm 11.9.0,依赖为 @deepseek-ai/cordis 4.0.5。
- 执行 node demo.mjs。练习数据和产出都留在进程内存,运行期间可以离线。桌面端无需安装这个示例,也不需要提供 API Key。
node --version
npm ci --ignore-scripts --no-audit --no-fund
node demo.mjs02
第二步,逐行预测,再与终端对照
| 动作 | 终端能让你核验什么 |
|---|---|
| 开始时只有回执台;提交 A00 | 依赖缺席,回执台等待。草稿数为 0。 |
| 装上格式服务;提交 A01(28.5 元) | 回执台开始监听提交事件。出现 A01|28.50 元|待人工审核。 |
| 卸下格式服务;提交 A02 | 监听随消费方暂停而清理,A02 没有回执。A01 已经生成,仍保存在本次进程的草稿数组中。 |
| 恢复服务;提交 A03(42 元) | 只新增 A03|42.00 元|待人工审核。两条回执均在,程序结束后已开放的回执台计数为 0。 |
03
第三步,在源码中找到三处因果关系
打开 demo.mjs。inject 列出回执台必须等到的格式服务。ctx.on 将一次提交接到格式化方法。ctx.effect 把“回执台营业”的标记与清理它的函数一起登记。卸下格式服务后,回执台的必需依赖消失,两项注册随之撤下;已经写进数组的回执仍由业务保存。
脚本中的 assert 会直接核对内容、数量和清理结果。在练习副本中把提交 A03 的金额从 42 改成 43,保留原来的断言,再跑一次。报错中应显示实际的 43.00 元与预期的 42.00 元。将金额改回即可重新跑通。
inject: ['officeFormat']
// 提交事件到来时,使用当前可用的格式服务。
ctx.on('office/submitted', (id, yuan) => {
drafts.push(ctx.officeFormat.format(id, yuan));
});04
第四步,验证行政组与门店组各用哪套规则
在同一个目录运行 node scopes.mjs。两个子上下文分别隔离 officeRule,各自提供行政组或门店组的审批规则。终端应显示“行政区 → 行政组;门店区 → 门店组;根上下文 → 未提供。”三个断言分别检查行政区、门店区和根上下文。
两个部门访问服务时用的都是 officeRule。名字相同而结果不同,是因为它们的查找位置不同。想复核,打开 scopes.mjs,先找到两个 isolate,再看三条 get 的接收者。
node scopes.mjs05
卡住时看哪里
| 看到的现象 | 下一步 |
|---|---|
| 命令找不到 node 或 npm | 安装可用的 Node.js,重新打开终端,再查版本。 |
| npm ci 报缺少 package-lock.json | 切到解压出的 cordis-demo 文件夹。确保包清单和锁文件在同一层。 |
| ERR_MODULE_NOT_FOUND | 检查依赖安装是否成功。运行时包名是 @deepseek-ai/cordis。 |
| 期待看到桌面插件或报销文件 | 观察终端输出和断言。本题启动独立 Node.js 进程,使用内存草稿;要接 DSH 工具注册表,请接着读官方教程第七章。 |
来源与延伸阅读
配套资料
知识库与演示素材
知识库附录含录屏分镜。练习包里的 INDEX.md 可按题目查找会议简报、只读目录核对、Cordis 报销回执,以及门店销售和团队练习。