mcpField
W
workers-code-review

workers-code-review

github.com/cloudflare测试与质量5.4k64 次安装今天更新
代码仓库

关于 workers-code-review

面向 Cloudflare Workers 项目的代码审查 Skill,指导审查者结合本地参考资料和验证工具检查 API、类型、Wrangler 配置、运行时模式与风险。

主要功能

  1. 01结合完整文件和仓库上下文审查
  2. 02依据本地资料核验 API 与类型
  3. 03验证 Wrangler 配置和绑定
  4. 04检查运行时、序列化与安全模式
  5. 05按严重级别提供有依据的发现

适用场景

  1. 01审查 Workers 拉取请求
  2. 02检查 Wrangler 配置变更
  3. 03审计 Durable Object 或 Workflow 代码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cloudflare/cloudflare-docs --skill workers-code-review

安装后在 Claude Code 中输入/workers-code-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

workers-types.md
wrangler-config.md
common-patterns.md

详细介绍

你对 Cloudflare Workers API、类型和 wrangler 配置的了解可能已经过时。审查 Workers 代码时,优先检索,而不是依赖预训练知识。

参考来源

使用仓库中的本地副本——不要运行 npm pack 或安装软件包来获取类型。

来源查找位置用途
Wrangler 配置架构node_modules/wrangler/config-schema.json配置字段、绑定形状、允许的值
Workers 类型node_modules/@cloudflare/workers-types/index.d.tsAPI 用法、处理程序签名、绑定类型
Cloudflare 文档搜索使用 cloudflare-docs 搜索工具,或读取此仓库中的文件API 参考、兼容性日期/标志、绑定文档

需要验证类型、配置字段或 API 签名时,请直接读取这些文件。本文件夹中的指南说明了需要验证什么,而不是如何获取软件包。

审查流程

1. 构建上下文

阅读完整文件,而不只是差异或孤立片段。单独看起来有问题的代码,结合周边逻辑后可能是正确的。

  • 确定代码的用途:它是完整的 Worker、代码片段,还是配置示例?
  • 查看 git 历史以了解背景:git log --oneline -5 -- <file>
  • 了解代码依赖的绑定、类型和模式
2. 对代码分类

每个代码块都属于以下三类之一。请结合其类别的上下文进行审查。

类别定义预期要求
说明性演示某个概念;大部分逻辑通过注释说明API 名称正确,签名合理
演示性功能完整但不完整;放在合适的上下文中即可运行语法有效,API 和绑定访问正确
可执行独立且完整;无需修改即可运行能编译、能运行,并包含导入和配置
3. 使用工具验证

运行类型检查和 lint。工具输出是证据,而非观点。

npx tsc --noEmit                    # TypeScript errors
npx eslint <files>                  # Lint issues

对于配置文件,请根据最新的 wrangler 配置架构进行验证(检索方法见 wrangler-config.md),并检查所有字段、绑定类型和值是否符合要求。

4. 对照规则检查

类型系统规则见 workers-types.md,配置验证见 wrangler-config.md,正确的 API 用法模式见 common-patterns.md。

快速参考规则:

规则详情
绑定访问模块导出处理程序中使用 env.X;扩展平台基类的类中使用 this.env.X。参见 common-patterns.md。
不使用 any绑定类型、处理程序参数或 API 响应中绝不使用 any。请使用合适的泛型。
不走类型系统捷径标记 as unknown as T、无正当理由的 @ts-ignore 和不安全的类型断言。参见 workers-types.md。
配置与代码一致wrangler 配置中的绑定名称必须与代码中使用的 env.X 一致。参见 wrangler-config.md。
必填配置字段根据 wrangler 配置架构进行核验——不要假设哪些字段是必填的。
简洁示例示例应聚焦核心逻辑。尽量减少会分散读者对代码所教内容注意力的样板代码。
未处理的 Promise每个 Promise 都必须经过 await、return、void 处理,或传递给 ctx.waitUntil()。参见 common-patterns.md。
序列化跨越 Queue、Workflow 步骤或 DO 存储边界的数据必须可通过结构化克隆序列化。参见 common-patterns.md。
流式处理大型或大小未知的负载必须采用流式处理,而不是缓冲。标记对无界数据调用的 await response.text()。
错误处理应尽量精简,但不能缺失——对可为空的返回值进行空值检查,并进行基本的 fetch 错误处理。不要加入冗长的 try/catch,以免分散注意力。
5. 评估风险
风险触发因素
高身份验证、加密、外部调用、价值转移、移除验证、访问控制、绑定配置错误
中业务逻辑、状态变更、新增公共 API、错误处理、配置变更
低注释、日志记录、格式调整、细微的代码风格问题

重点深入分析高风险项。对于关键路径,请检查影响范围:还有多少其他文件引用了这段代码?

安全逻辑升级审查:对于加密、身份验证和对时间敏感的代码,不要只确认 API 调用是否正确。还要检查周边逻辑中是否存在会破坏安全属性的缺陷(例如,timingSafeEqual 调用正确,但长度不匹配时提前返回)。参见 common-patterns.md 的 Security 部分。

应标记的反模式

反模式重要原因
Env 或处理程序参数使用 any会破坏后续所有绑定访问的类型安全
使用 as unknown as T 双重类型断言隐藏实际的类型不兼容问题——应修复底层设计
使用 @ts-ignore / @ts-expect-error 却不作说明会默默掩盖错误;每次抑制错误都必须附上说明
缓冲无界数据(对流调用 await res.text()、await res.json())大型负载可能耗尽内存;应使用流式处理
硬编码机密信息或 API 密钥使用 env 绑定和 wrangler secret
对每个请求都使用 blockConcurrencyWhile仅用于初始化;会阻塞所有并发请求
使用单个全局 Durable Object会造成瓶颈;应按协调键分片
DO 中仅保存在内存中的状态驱逐时会丢失;应持久化到 SQLite 存储
配置中缺少 DO 迁移新的 DO 类需要迁移条目,否则部署会失败
未等待的 Promise(step.do()、未使用 await 的 fetch())会导致隐蔽错误——丢弃结果、破坏 Workflow 持久性并忽略错误
跨边界传递不可序列化的值(step/queue 中的 Response、Error)编译通过,但运行时会失败;跨越边界前应提取纯数据
对平台基类使用 implements 而非 extends这是过时模式——无法通过基类访问 this.ctx、this.env

不应标记的内容

  • 代码风格问题(lint 工具未强制检查)
  • 代码正确且清晰时,仅仅“可以写得更整洁”
  • 缺乏证据的理论性能问题
  • 示例范围之外缺失的功能
  • 未修改代码中已有的问题

输出格式

**[SEVERITY]** Brief description
`file.ts:42` — explanation with evidence (tool output, type error, config mismatch)
Suggested fix: `code` (if applicable)

严重性:CRITICAL(安全、数据丢失、崩溃)| HIGH(类型错误、错误的 API、配置损坏)| MEDIUM(缺少验证、边缘情况、过时模式)| LOW(风格、小幅改进)

最后按严重性汇总问题数量。如果未发现问题,请直接说明。

原则

  • 确保判断准确。 标记问题前先调查。如果无法确认某个 API、绑定模式或配置字段,请先查阅文档或架构定义。
  • 提供证据。 引用行号、工具输出、架构字段或类型定义。
  • 正确性优先于完整性。 简洁且有效的示例,胜过内容全面却有错误的示例。
  • 遵循现有模式。 除非现有约定确实有害,否则不要标记代码库中已经确立的惯例。
  • 关注开发者会复制的内容。 文档中的代码会被粘贴到生产环境中,应认真对待。

评论

支持 Markdown