用途
本技能用于在 Windmill 平台上编写 Deno 运行时的 TypeScript 脚本。官方指引明确:TypeScript 优先使用 Bun(write-script-bun),仅在脚本明确需要 Deno 运行时时才使用 Deno——即依赖 Deno 标准库,或使用 deno.land URL 导入且没有对应 npm 包的情况。
主要能力
- Deno 运行时,支持
npm:前缀的 npm 包,以及原生 Deno 库。 - 脚本结构:导出单个异步函数
main,不要调用它;库会自动安装。 - 资源类型:凭据与配置存于 resource,通过参数传入,使用
RT命名空间(如RT.Stripe)。使用前可查看项目根目录的 rt.d.ts(由wmill resource-type generate-namespace生成)。 - 导入方式:npm 包用
npm:前缀,Deno 标准库可直接引用 deno.land URL。 - Windmill 客户端:
import * as wmill from "windmill-client",优先用其处理与 Windmill 的交互(读写资源/变量/状态、运行脚本与 flow、S3 操作等),外部 HTTP API 才用 fetch。 - 预处理器脚本:函数名为
preprocessor,接收单个event参数,返回对象决定传给 flow 的参数值;支持 webhook、http、websocket、kafka、email、nats、postgres、sqs、mqtt、amqp、gcp、azure 等来源。 - S3 对象操作:使用内置的
wmill.S3Object类型,支持loadS3File、loadS3FileStream、writeS3File。
使用方式(命令选择)
wmill script preview <script_path>:本地迭代脚本时的默认命令,无需部署即可运行本地文件。wmill script run <path>:运行已部署到工作区的脚本,仅当用户明确要测试已部署版本时使用。wmill generate-metadata:为改动过的脚本重新生成本地.script.yaml(输入 schema)与.lock(已解析依赖),并刷新 wmill-lock.yaml 中的内容哈希,只写本地文件,不是部署。无路径参数时仅重新生成哈希已漂移的条目;导入会传播,改动被导入的模块会使所有导入者失效,可用--dry-run查看并配合路径参数或--strict-folder-boundaries收窄。wmill generate-metadata rehash则仅从磁盘重新记录哈希,不与后端通信。- 部署:通过 git push 或
wmill sync push(取决于仓库接线方式),仅在用户明确要求部署/发布/推送时执行。
适用场景
需要 Deno 标准库或 deno.land URL 导入的 TypeScript 脚本;需要 Windmill 平台交互、S3 存储、或作为 flow 触发器预处理数据的场景。
限制与注意
- 不应把脚本推送到远端只为测试;推送即部署,会用未测试的改动覆盖工作区版本。
wmill script preview不部署但会执行代码,可能产生副作用。wmill generate-metadata会重新解析依赖,可能提升未固定的版本(与从 UI 部署时相同,属预期行为);应对比生成的 .lock 并告知用户版本变化,代码中固定版本可避免。- 返回值需可 JSON 序列化,供后续 flow 步骤通过
results.step_id使用。 - 脚本输入 schema 可含顶层
prompt_for_ai字符串,是作者给选择输入的 AI 的指令。