mcpField
W
wrangler

wrangler

github.com/cloudflare云与 DevOps5.4k104 次安装今天更新
代码仓库

关于 wrangler

用于开发、部署和管理 Cloudflare Workers 及相关资源的命令行工具技能指南。它汇总 Wrangler 常用命令、配置、资源管理和本地开发流程。

主要功能

  1. 01初始化、开发与部署 Worker
  2. 02校验配置并生成 TypeScript 类型
  3. 03管理 KV、R2、D1 等资源
  4. 04查看实时日志与版本回滚

适用场景

  1. 01本地运行并部署 Worker
  2. 02配置绑定并生成类型
  3. 03管理数据库、存储桶和队列
  4. 04排查配置或部署问题

安装

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

$npx skills add https://github.com/cloudflare/cloudflare-docs --skill wrangler

安装后在 Claude Code 中输入/wrangler确认已加载。

详细介绍

Wrangler CLI

部署、开发和管理 Cloudflare Workers 及相关资源。

首先:验证 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
部署到 Cloudflarewrangler deploy
模拟部署wrangler deploy --dry-run
生成 TypeScript 类型wrangler types
验证配置wrangler check
查看实时日志wrangler tail
删除 Workerwrangler 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"
    }
  ]
}

Pipelines

管理 Pipelines
# 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" }
  ]
}

Secrets Store

管理存储区
# 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

最佳实践

  1. 对 wrangler.jsonc 进行版本控制:将其视为 Worker 配置的唯一事实来源。
  2. 使用自动配置:部署时省略资源 ID,以便自动创建资源。
  3. 在 CI 中运行 wrangler types:将其添加到构建步骤中,以发现绑定不匹配问题。
  4. 使用环境:通过 env.staging、env.production 分隔预发布环境和生产环境。
  5. 设置 compatibility_date:每季度更新,以获取新的运行时功能。
  6. 使用 .dev.vars 存储本地密钥:切勿将密钥提交到配置中。
  7. 先在本地测试:部署前,使用本地绑定运行 wrangler dev。
  8. 在重大部署前使用 --dry-run:验证更改,但不进行部署。

评论

支持 Markdown