1
0
mirror of synced 2026-05-21 01:36:28 +08:00
Files
cook/docs/dev/cli.md
YunYouJun d3b933cca5 feat: 重构为 monorepo 结构,新增 cook CLI 和 types 共享包
- 将 scripts/ 迁移至 packages/cook CLI 工具(飞书 fetch、CSV convert、单元测试)
- 新增 packages/types 共享类型包,抽取 app/types 类型定义
- 更新依赖(nuxt 4.4、vite 8、eslint 10.1 等)
- 新增 vitest coverage 配置
- 更新文档和配置(CLAUDE.md、.env.example、pnpm-workspace)
2026-03-25 02:11:31 +08:00

3.8 KiB
Raw Blame History

Cook CLI

Cook CLI 是一个命令行工具,用于管理菜谱数据。

安装

项目依赖已在 workspace 中配置,无需单独安装。

环境配置

数据源

菜谱数据存储在飞书 Wiki 电子表格中:

配置飞书应用

  1. 复制环境变量模板:

    cp .env.example .env
    
  2. 填写飞书开放平台应用凭证:

    # .env
    FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxx
    FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxx
    
  3. 获取飞书凭证:

    • 访问 飞书开放平台
    • 创建或选择你的应用
    • 在"凭证与基础信息"中获取 App IDApp Secret

::: tip .env 文件已被 .gitignore 忽略,不会被提交到 Git。 :::

命令

fetch

从飞书拉取菜谱数据并生成 CSV + JSON 文件。

pnpm fetch

功能:

  • 从飞书 Wiki 获取电子表格数据
  • 解析并清洗数据
  • 生成 app/data/recipe.csv
  • 生成 app/data/recipe.json

输出示例:

✔ 从飞书 Wiki 获取电子表格 token...
✔ 读取到 600 行数据 (含表头)
✔ 解析出 599 条菜谱
✔ 写入 app/data/recipe.csv
✔ 写入 app/data/recipe.json

::: warning 注意 此命令会覆盖现有的 recipe.csvrecipe.json 文件。 :::

convert

将本地 CSV 数据转换为 JSON 格式。

pnpm convert

功能:

  • 读取 app/data/recipe.csv
  • 转换为 JSON 格式
  • 生成 app/data/recipe.json

使用场景:

  • 手动编辑 CSV 后需要重新生成 JSON
  • 确保 CSV 和 JSON 数据同步

工作流程

更新菜谱数据

# 1. 从飞书拉取最新数据
pnpm fetch

# 2. 启动开发服务器查看效果
pnpm dev

手动编辑数据

# 1. 编辑 app/data/recipe.csv

# 2. 转换为 JSON
pnpm convert

# 3. 查看效果
pnpm dev

数据格式

CSV 格式

名称,别名,类别,主料,辅料,调料,做法,难度,耗时,口味,图片,视频
宫保鸡丁,,,鸡胸肉,花生米,干辣椒,,简单,30分钟,麻辣,https://...,https://...

JSON 格式

[
  {
    "名称": "宫保鸡丁",
    "别名": "",
    "类别": "",
    "主料": "鸡胸肉",
    "辅料": "花生米",
    "调料": "干辣椒",
    "做法": "炒",
    "难度": "简单",
    "耗时": "30分钟",
    "口味": "麻辣",
    "图片": "https://...",
    "视频": "https://..."
  }
]

故障排查

飞书 API 调用失败

错误信息:

Error: Feishu API failed with code 99991663

解决方案:

  1. 检查 .env 文件是否存在
  2. 确认 FEISHU_APP_IDFEISHU_APP_SECRET 是否正确
  3. 验证应用是否有访问 Wiki 的权限
  4. 检查飞书 Wiki 链接是否正确配置在代码中

CSV 解析错误

错误信息:

Error: Failed to parse CSV

解决方案:

  1. 检查 CSV 文件格式是否正确
  2. 确认字段分隔符为逗号
  3. 检查是否有未闭合的引号
  4. 验证编码是否为 UTF-8

相关文档

测试

运行测试

# 运行所有测试
pnpm test

# 运行 CLI 相关测试
pnpm test packages/cook

# 运行特定测试文件
pnpm test packages/cook/src/utils/csv.test.ts

测试覆盖

CLI 工具包含以下测试:

  • CSV 解析测试 (csv.test.ts)
    • BV 号清洗和 URL 处理
    • CSV 格式解析
    • 空值和边界情况处理
    • 数组字段过滤空值
    • CSV 往返一致性parse → stringify → parse
    • 与 fetch 命令输出格式一致性

测试确保 fetchconvert 命令产生完全一致的数据格式。