关于 wrangler
wrangler 是用于 Cloudflare Workers Wrangler CLI 开发与运维的技能,强调在使用命令或配置前先查阅最新文档和模式信息。
主要功能
- 01检索最新 CLI 与配置指引
- 02初始化并本地开发 Worker
- 03验证配置并生成 TypeScript 类型
- 04部署 Worker 并管理环境
- 05管理 Cloudflare 资源绑定
适用场景
- 01编写命令前核对当前 Wrangler 参数
- 02在本地开发并验证 Worker
- 03将 Worker 部署到测试或生产环境
- 04管理 KV、R2 或 D1 等资源
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pedronauck/ skills --skill wrangler安装后在 Claude Code 中输入/wrangler确认已加载。
详细介绍
Wrangler CLI
你对 Wrangler CLI 标志、配置字段和子命令的了解可能已经过时。处理任何 Wrangler 任务时,优先检索信息,而不是依赖预训练知识。
检索来源
在编写或审查 Wrangler 命令和配置之前,先获取最新信息。不要依赖内置知识来处理 CLI 标志、配置字段或绑定结构。
| 来源 | 检索方式 | 用途 |
|---|---|---|
| Wrangler 文档 | https://developers.cloudflare.com/workers/wrangler/ | CLI 命令、标志、配置参考 |
| Wrangler 配置架构 | node_modules/wrangler/config-schema.json | 配置字段、绑定结构、允许的值 |
| Cloudflare 文档 | 搜索工具或 https://developers.cloudflare.com/workers/ | API 参考、兼容性日期/标志 |
首先:验证 Wrangler 是否已安装
wrangler --version # Requires v4.x+
如果尚未安装:
npm install -D wrangler@latest
关键指南
- 使用
wrangler.jsonc:优先选择 JSON 配置,而不是 TOML。较新的功能仅支持 JSON。 - 设置
compatibility_date:使用近期日期(30 天以内)。请查看 https://developers.cloudflare.com/workers/configuration/compatibility-dates/ - 配置更改后生成类型:运行
wrangler types更新 TypeScript 绑定。 - 本地开发默认使用本地存储:除非设置
remote: true,否则绑定会使用本地模拟。 - 部署前验证配置:运行
wrangler check,及早发现错误。 - 使用环境区分预发布和生产环境:在配置中定义
env.staging和env.production。
快速入门:新建 Worker
# Initialize new project
npx wrangler init my-worker
# Or with a framework
npx create-cloudflare@latest my-app
快速参考:核心命令
| 任务 | 命令 |
|---|---|
| 启动本地开发服务器 | wrangler dev |
| 部署到 Cloudflare | wrangler deploy |
| 执行部署试运行 | wrangler deploy --dry-run |
| 生成 TypeScript 类型 | wrangler types |
| 验证配置 | wrangler check |
| 查看实时日志 | wrangler tail |
| 删除 Worker | wrangler delete |
| 身份验证状态 | wrangler whoami |
配置(wrangler.jsonc)
最小配置
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2026-01-01",
}
包含绑定的完整配置
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2026-01-01",
"compatibility_flags": ["nodejs_compat_v2"],
// Environment variables
"vars": {
"ENVIRONMENT": "production",
},
// KV Namespace
"kv_namespaces": [{ "binding": "KV", "id": "<KV_NAMESPACE_ID>" }],
// R2 Bucket
"r2_buckets": [{ "binding": "BUCKET", "bucket_name": "my-bucket" }],
// D1 Database
"d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "<DB_ID>" }],
// Workers AI (always remote)
"ai": { "binding": "AI" },
// Vectorize
"vectorize": [{ "binding": "VECTOR_INDEX", "index_name": "my-index" }],
// Hyperdrive
"hyperdrive": [{ "binding": "HYPERDRIVE", "id": "<HYPERDRIVE_ID>" }],
// Durable Objects
"durable_objects": {
"bindings": [{ "name": "COUNTER", "class_name": "Counter" }],
},
// Cron triggers
"triggers": {
"crons": ["0 * * * *"],
},
// Environments
"env": {
"staging": {
"name": "my-worker-staging",
"vars": { "ENVIRONMENT": "staging" },
},
},
}
根据配置生成类型
# Generate worker-configuration.d.ts
wrangler types
# Custom output path
wrangler types ./src/env.d.ts
# Check types are up to date (CI)
wrangler types --check
本地开发
启动开发服务器
# Local mode (default) - uses local storage simulation
wrangler dev
# With specific environment
wrangler dev --env staging
# Force local-only (disable remote bindings)
wrangler dev --local
# Remote mode - runs on Cloudflare edge (legacy)
wrangler dev --remote
# Custom port
wrangler dev --port 8787
# Live reload for HTML changes
wrangler dev --live-reload
# Test scheduled/cron handlers
wrangler dev --test-scheduled
# Then visit: http://localhost:8787/__scheduled
本地开发的远程绑定
在绑定配置中使用 remote: true,即可在本地运行时连接到真实资源:
{
"r2_buckets": [{ "binding": "BUCKET", "bucket_name": "my-bucket", "remote": true }],
"ai": { "binding": "AI", "remote": true },
"vectorize": [{ "binding": "INDEX", "index_name": "my-index", "remote": true }],
}
建议使用远程绑定:AI(必需)、Vectorize、Browser Rendering、mTLS、Images。
本地密钥
为本地开发创建 .dev.vars:
API_KEY=local-dev-key
DATABASE_URL=postgres://localhost:5432/dev
部署
部署 Worker
# Deploy to production
wrangler deploy
# Deploy specific environment
wrangler deploy --env staging
# Dry run (validate without deploying)
wrangler deploy --dry-run
# Keep dashboard-set variables
wrangler deploy --keep-vars
# Minify code
wrangler deploy --minify
管理密钥
# Set secret interactively
wrangler secret put API_KEY
# Set from stdin
echo "secret-value" | wrangler secret put API_KEY
# List secrets
wrangler secret list
# Delete secret
wrangler secret delete API_KEY
# Bulk secrets from JSON file
wrangler secret bulk secrets.json
版本与回滚
# List recent versions
wrangler versions list
# View specific version
wrangler versions view <VERSION_ID>
# Rollback to previous version
wrangler rollback
# Rollback to specific version
wrangler rollback <VERSION_ID>
KV(键值存储)
管理命名空间
# Create namespace
wrangler kv namespace create MY_KV
# List namespaces
wrangler kv namespace list
# Delete namespace
wrangler kv namespace delete --namespace-id <ID>
管理键
# Put value
wrangler kv key put --namespace-id <ID> "key" "value"
# Put with expiration (seconds)
wrangler kv key put --namespace-id <ID> "key" "value" --expiration-ttl 3600
# Get value
wrangler kv key get --namespace-id <ID> "key"
# List keys
wrangler kv key list --namespace-id <ID>
# Delete key
wrangler kv key delete --namespace-id <ID> "key"
# Bulk put from JSON
wrangler kv bulk put --namespace-id <ID> data.json
配置绑定
{
"kv_namespaces": [{ "binding": "CACHE", "id": "<NAMESPACE_ID>" }],
}
R2(对象存储)
管理存储桶
# Create bucket
wrangler r2 bucket create my-bucket
# Create with location hint
wrangler r2 bucket create my-bucket --location wnam
# List buckets
wrangler r2 bucket list
# Get bucket info
wrangler r2 bucket info my-bucket
# Delete bucket
wrangler r2 bucket delete my-bucket
管理对象
# Upload object
wrangler r2 object put my-bucket/path/file.txt --file ./local-file.txt
# Download object
wrangler r2 object get my-bucket/path/file.txt
# Delete object
wrangler r2 object delete my-bucket/path/file.txt
配置绑定
{
"r2_buckets": [{ "binding": "ASSETS", "bucket_name": "my-bucket" }],
}
D1(SQL 数据库)
管理数据库
# Create database
wrangler d1 create my-database
# Create with location
wrangler d1 create my-database --location wnam
# List databases
wrangler d1 list
# Get database info
wrangler d1 info my-database
# Delete database
wrangler d1 delete my-database
执行 SQL
# Execute SQL command (remote)
wrangler d1 execute my-database --remote --command "SELECT * FROM users"
# Execute SQL file (remote)
wrangler d1 execute my-database --remote --file ./schema.sql
# Execute locally
wrangler d1 execute my-database --local --command "SELECT * FROM users"
迁移
# Create migration
wrangler d1 migrations create my-database create_users_table
# List pending migrations
wrangler d1 migrations list my-database --local
# Apply migrations locally
wrangler d1 migrations apply my-database --local
# Apply migrations to remote
wrangler d1 migrations apply my-database --remote
导出/备份
# Export schema and data
wrangler d1 export my-database --remote --output backup.sql
# Export schema only
wrangler d1 export my-database --remote --output schema.sql --no-data
配置绑定
{
"d1_databases": [
{
"binding": "DB",
"database_name": "my-database",
"database_id": "<DATABASE_ID>",
"migrations_dir": "./migrations",
},
],
}
Vectorize(向量数据库)
管理索引
# Create index with dimensions
wrangler vectorize create my-index --dimensions 768 --metric cosine
# Create with preset (auto-configures dimensions/metric)
wrangler vectorize create my-index --preset @cf/baai/bge-base-en-v1.5
# List indexes
wrangler vectorize list
# Get index info
wrangler vectorize get my-index
# Delete index
wrangler vectorize delete my-index
管理向量
# Insert vectors from NDJSON file
wrangler vectorize insert my-index --file vectors.ndjson
# Query vectors
wrangler vectorize query my-index --vector "[0.1, 0.2, ...]" --top-k 10
配置绑定
{
"vectorize": [{ "binding": "SEARCH_INDEX", "index_name": "my-index" }],
}
Hyperdrive(数据库加速器)
管理配置
# Create config
wrangler hyperdrive create my-hyperdrive \
--connection-string "postgres://user:pass@host:5432/database"
# List configs
wrangler hyperdrive list
# Get config details
wrangler hyperdrive get <HYPERDRIVE_ID>
# Update config
wrangler hyperdrive update <HYPERDRIVE_ID> --origin-password "new-password"
# Delete config
wrangler hyperdrive delete <HYPERDRIVE_ID>
配置绑定
{
"compatibility_flags": ["nodejs_compat_v2"],
"hyperdrive": [{ "binding": "HYPERDRIVE", "id": "<HYPERDRIVE_ID>" }],
}
Workers AI
列出模型
# List available models
wrangler ai models
# List finetunes
wrangler ai finetune list
配置绑定
{
"ai": { "binding": "AI" },
}
注意:Workers AI 始终在远程运行,即使在本地开发时也会产生使用费用。
队列
管理队列
# Create queue
wrangler queues create my-queue
# List queues
wrangler queues list
# Delete queue
wrangler queues delete my-queue
# Add consumer to queue
wrangler queues consumer add my-queue my-worker
# Remove consumer
wrangler queues consumer remove my-queue my-worker
配置绑定
{
"queues": {
"producers": [{ "binding": "MY_QUEUE", "queue": "my-queue" }],
"consumers": [
{
"queue": "my-queue",
"max_batch_size": 10,
"max_batch_timeout": 30,
},
],
},
}
容器
构建并推送镜像
# Build container image
wrangler containers build -t my-app:latest .
# Build and push in one command
wrangler containers build -t my-app:latest . --push
# Push existing image to Cloudflare registry
wrangler containers push my-app:latest
管理容器
# List containers
wrangler containers list
# Get container info
wrangler containers info <CONTAINER_ID>
# Delete container
wrangler containers delete <CONTAINER_ID>
管理镜像
# List images in registry
wrangler containers images list
# Delete image
wrangler containers images delete my-app:latest
管理外部注册表
# List configured registries
wrangler containers registries list
# Configure external registry (e.g., ECR)
wrangler containers registries configure <DOMAIN> \
--public-credential <AWS_ACCESS_KEY_ID>
# Delete registry configuration
wrangler containers registries delete <DOMAIN>
工作流
管理工作流
# List workflows
wrangler workflows list
# Describe workflow
wrangler workflows describe my-workflow
# Trigger workflow instance
wrangler workflows trigger my-workflow
# Trigger with parameters
wrangler workflows trigger my-workflow --params '{"key": "value"}'
# Delete workflow
wrangler workflows delete my-workflow
管理工作流实例
# List instances
wrangler workflows instances list my-workflow
# Describe instance
wrangler workflows instances describe my-workflow <INSTANCE_ID>
# Terminate instance
wrangler workflows instances terminate my-workflow <INSTANCE_ID>
配置绑定
{
"workflows": [
{
"binding": "MY_WORKFLOW",
"name": "my-workflow",
"class_name": "MyWorkflow",
},
],
}
流水线
管理流水线
# Create pipeline
wrangler pipelines create my-pipeline --r2 my-bucket
# List pipelines
wrangler pipelines list
# Show pipeline details
wrangler pipelines show my-pipeline
# Update pipeline
wrangler pipelines update my-pipeline --batch-max-mb 100
# Delete pipeline
wrangler pipelines delete my-pipeline
配置绑定
{
"pipelines": [{ "binding": "MY_PIPELINE", "pipeline": "my-pipeline" }],
}
密钥存储
管理存储
# Create store
wrangler secrets-store store create my-store
# List stores
wrangler secrets-store store list
# Delete store
wrangler secrets-store store delete <STORE_ID>
管理存储中的密钥
# Add secret to store
wrangler secrets-store secret put <STORE_ID> my-secret
# List secrets in store
wrangler secrets-store secret list <STORE_ID>
# Get secret
wrangler secrets-store secret get <STORE_ID> my-secret
# Delete secret from store
wrangler secrets-store secret delete <STORE_ID> my-secret
配置绑定
{
"secrets_store_secrets": [
{
"binding": "MY_SECRET",
"store_id": "<STORE_ID>",
"secret_name": "my-secret",
},
],
}
Pages(前端部署)
# Create Pages project
wrangler pages project create my-site
# Deploy directory to Pages
wrangler pages deploy ./dist
# Deploy with specific branch
wrangler pages deploy ./dist --branch main
# List deployments
wrangler pages deployment list --project-name my-site
可观测性
跟踪日志
# Stream live logs
wrangler tail
# Tail specific Worker
wrangler tail my-worker
# Filter by status
wrangler tail --status error
# Filter by search term
wrangler tail --search "error"
# JSON output
wrangler tail --format json
配置日志记录
{
"observability": {
"enabled": true,
"head_sampling_rate": 1,
},
}
测试
使用 Vitest 进行本地测试
npm install -D @cloudflare/vitest-pool-workers vitest
vitest.config.ts:
import { defineWorkersConfig } from "@cloudflare/vitest-pool-workers/config";
export default defineWorkersConfig({
test: {
poolOptions: {
workers: {
wrangler: { configPath: "./wrangler.jsonc" },
},
},
},
});
测试计划事件
# Enable in dev
wrangler dev --test-scheduled
# Trigger via HTTP
curl http://localhost:8787/__scheduled
故障排除
常见问题
| 问题 | 解决方案 |
|---|---|
command not found: wrangler | 安装:npm install -D wrangler |
| 身份验证错误 | 运行 wrangler login |
| 配置验证错误 | 运行 wrangler check |
| 配置更改后出现类型错误 | 运行 wrangler types |
| 本地存储未持久化 | 检查 .wrangler/state 目录 |
| Worker 中的绑定未定义 | 确认绑定名称与配置完全一致 |
调试命令
# Check auth status
wrangler whoami
# Validate config
wrangler check
# View config schema
wrangler docs configuration
最佳实践
- 对
wrangler.jsonc进行版本控制:将其视为 Worker 配置的真实来源。 - 使用自动配置:省略资源 ID,以便在部署时自动创建资源。
- 在 CI 中运行
wrangler types:将其添加到构建步骤,以捕获绑定不匹配问题。 - 使用环境:通过
env.staging、env.production分离预发布环境和生产环境。 - 设置
compatibility_date:每季度更新一次,以获得新的运行时功能。 - 使用
.dev.vars存储本地密钥:切勿将密钥提交到配置中。 - 先在本地测试:部署前,使用本地绑定运行
wrangler dev。 - 重大部署前使用
--dry-run:在不部署的情况下验证更改。
评论
支持 Markdown