Skip to content

3-启动代码生成

类型生成

运行脚本

代码生成脚本将会为你执行以下操作
  1. 将创建 ./data_cleaner_ci_generated/ 目录和 ./user_code/ 符号链接目录。这两个目录已被 .gitignore 排除,不会被代码管理。
  2. 将在 ./data_cleaner_ci_generated/ 目录中执行以下操作:
    • 生成配置文件并保存到 用户家目录 的配置中,然后将配置文件 符号链接./data_cleaner_ci_generated/config.json,以便进行 TypeScript 类型检查。
    • 根据配置文件内容,在 ./data_cleaner_ci_generated 目录下生成数仓中的数据类型和接口 API。
  3. 将创建私人代码目录 $HOME/.libian/crawler/data_cleaner_ci/user_code 并将其 符号链接./user_code/
    • 以便进行 TypeScript 类型检查。
    • 其他公共脚本需要从 ./user_code/ 目录中导入类型,以免私人代码中的类型名称直接被公共代码使用。

在设置好数据仓库后,执行以下命令以全量数据生成数仓的 API 代码:

shell
deno task init:code_gen

init:code_gen 命令详情参考:

shell
deno task init:code_gen --help
txt
Help for code_gen.ts:

-----------------------------------------
常用参数:

--help
      显示帮助。

--skip-existed
      跳过已经生成的类型文件。
      
      如果你确信 jsonata_tampletes 没有更改、garbage 表只新增不修改,
      那么你可以使用此选项节省大量时间。

      否则,你可以不启用此选项,脚本也会“局部更新式”的修改已存在的类型文件,
      只是全量计算将会耗费大量时间。

--debugopt-logtime
      输出时间花费。

--only-gen-nocodb
      只生成 nocodb mate 的类型文件。

-----------------------------------------
不建议使用的内部参数,建议只在开发调试时使用:

--no-network
      不使用任何远程仓库的数据,仅使用本地缓存来类型生成。
      本地缓存位于 ./data_cleaner_ci_generated/.cache_by_id 中。

--only-gen-batches-union-merge-file
      只生成 index.ts 的联合类型声明文件。不生成批次数据类型文件。

--high-water-mark
      原始数据的 batch 会缓存在队列中,若队列未满则会在 timer 中异步继续加载。
      此值为队列的长度限制。默认值为 0。设置为 0 以禁用队列。
      该选项不建议修改,因为队列会导致更大的内存使用。

--batch-size
      覆盖设置每 batch 的最大长度。默认值 100,也可以在 ./data_cleaner_ci_generated/config.json 中的 **.batch_size 设置。
      如果设置过高的值可能导致 quicktype 子进程 OOM 。
shell
# 跳过已存在的 batch 类型生成,以便只生成增量数据的类型,非常节省时间。
# 但是要注意,如果你的 jsonata_template 改变,存量数据的 jsonata 转换输出会发生变化,请确保你的旧数据不受巨大影响时才能 --skip-existed。

deno task init:code_gen --skip-existed

检查结果

完成后,初始化工作就已经完成。然而,如果您需要适配并运行 general_data_process 目录下的公用脚本,您需要手动处理 TypeScript 类型导入。

您可以通过运行以下命令,检查生成的类型是否满足公开脚本的类型推断,并运行测试:

shell
deno tasks step:check