关于 cloudflare-workers-dev-experience
这是一项面向 Cloudflare Workers 开发者的本地开发技能,涵盖 Wrangler、Miniflare 等工具,提供项目初始化、配置、调试和依赖安全指引。
主要功能
- 01项目设置指引
- 02Wrangler 配置示例
- 03本地测试工作流
- 04调试与日志查看
- 05依赖安全建议
适用场景
- 01创建 Workers 项目
- 02在本地测试 Worker
- 03排查运行时和绑定问题
- 04检查软件包安装实践
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill cloudflare-workers-dev-experience安装后在 Claude Code 中输入/cloudflare-workers-dev-experience确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/debugging-tools.mdlocal-development.mdwrangler-config.mdscripts/dev-setup.shtemplates/dev-script.tswrangler-config.jsonc详细介绍
Cloudflare Workers 开发者体验
使用 Wrangler、Miniflare 和现代工具进行本地开发设置。
快速开始
# Create new project
bunx create-cloudflare@latest my-worker
# Or from scratch
mkdir my-worker && cd my-worker
bun init -y
bun add -d wrangler @cloudflare/workers-types
# Start local development
bunx wrangler dev
安全安装
像 bunx create-cloudflare 这样的脚手架工具会下载并执行远程代码。运行前,请遵循供应链安全最佳实践:
- 阻止安装后脚本 —
npm config set ignore-scripts true(或 Bun:默认禁用) - 冷却期 — 等待 7 天,让社区审核新版本
- 安装前审计 — 运行
socket package score npm <pkg>或使用socket npm install <pkg>检查软件包
加载 dependency-upgrade 技能,获取完整的安全配置,包括 Socket CLI 集成、冷却期设置、锁文件验证和 CI 强制执行。
必备 wrangler.jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2024-12-01",
// Development settings
"dev": {
"port": 8787,
"local_protocol": "http"
},
// Environment variables (non-secret)
"vars": {
"ENVIRONMENT": "development"
},
// Bindings
"kv_namespaces": [
{ "binding": "KV", "id": "abc123", "preview_id": "def456" }
],
"d1_databases": [
{ "binding": "DB", "database_id": "xyz789", "database_name": "my-db" }
],
"r2_buckets": [
{ "binding": "BUCKET", "bucket_name": "my-bucket" }
]
}
关键规则
- 本地测试始终使用
wrangler dev- 准确模拟 Cloudflare 运行时 - 设置
compatibility_date- 控制运行时行为,每季度更新 - 本地开发使用预览 ID - 与生产环境绑定项分开
- 正确配置 TypeScript - 使用
@cloudflare/workers-types - 启用源映射 - 在开发过程中获得更好的错误堆栈信息
可避免的 6 大错误
| 错误 | 症状 | 预防方法 |
|---|---|---|
| 找不到模块 | 部署时导入错误 | 在 tsconfig 中设置 "moduleResolution": "bundler" |
| 绑定项未定义 | 本地出现 env.KV is undefined | 在 KV 命名空间配置中添加 preview_id |
| HMR 不工作 | 更改未生效 | 检查端口冲突,使用 --local 标志 |
| D1 架构不匹配 | 本地查询失败 | 在本地数据库上运行迁移 |
| 类型错误 | 缺少绑定项类型 | 使用 wrangler types 生成类型 |
| CORS 问题 | 浏览器阻止请求 | 在开发处理程序中添加 CORS 标头 |
本地开发工作流
# Start dev server (recommended)
bunx wrangler dev
# With live reload
bunx wrangler dev --live-reload
# Remote mode (use actual Cloudflare services)
bunx wrangler dev --remote
# Specify environment
bunx wrangler dev --env staging
# Custom port
bunx wrangler dev --port 3000
TypeScript 配置
tsconfig.json:
{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "bundler",
"lib": ["ES2022"],
"types": ["@cloudflare/workers-types"],
"strict": true,
"noEmit": true,
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
Package.json 脚本
{
"scripts": {
"dev": "wrangler dev",
"deploy": "wrangler deploy",
"deploy:staging": "wrangler deploy --env staging",
"deploy:production": "wrangler deploy --env production",
"test": "vitest",
"test:watch": "vitest --watch",
"type-check": "tsc --noEmit",
"lint": "eslint src/",
"types": "wrangler types",
"tail": "wrangler tail",
"db:migrate": "wrangler d1 migrations apply DB",
"db:studio": "wrangler d1 execute DB --local --command 'SELECT 1'"
}
}
调试
控制台日志
// Development-only logging
export default {
async fetch(request: Request, env: Env): Promise<Response> {
if (env.ENVIRONMENT === 'development') {
console.log('Request:', request.method, request.url);
console.log('Headers:', Object.fromEntries(request.headers));
}
// Handler logic...
}
};
使用 wrangler tail
# Real-time logs from deployed worker
wrangler tail
# Filter by status
wrangler tail --status error
# Filter by method
wrangler tail --method POST
# JSON format for parsing
wrangler tail --format json
VS Code 调试
.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Wrangler Dev",
"type": "node",
"request": "launch",
"runtimeExecutable": "bunx",
"runtimeArgs": ["wrangler", "dev", "--inspector-port", "9229"],
"skipFiles": ["<node_internals>/**"],
"sourceMaps": true
}
]
}
何时加载参考资料
根据任务加载特定参考资料:
- 设置项目? → 加载
references/local-development.md,查看完整设置指南 - 配置 wrangler? → 加载
references/wrangler-config.md,查看所有配置选项 - 调试问题? → 加载
references/debugging-tools.md,了解调试技巧
模板
| 模板 | 用途 | 使用时机 |
|---|---|---|
templates/wrangler-config.jsonc | 完整的 wrangler 配置 | 开始新项目 |
templates/dev-script.ts | 开发实用工具 | 添加开发辅助工具 |
脚本
| 脚本 | 用途 | 命令 |
|---|---|---|
scripts/dev-setup.sh | 初始化开发环境 | ./dev-setup.sh |
资源
评论
支持 Markdown