mcpField
W
workers-migration

workers-migration

github.com/secondsky云与 DevOps24074 次安装5 周前更新
代码仓库

关于 workers-migration

面向将现有应用迁移到 Cloudflare Workers 的开发者,涵盖 AWS Lambda、Vercel、Express 等平台的迁移模式。还包括 Node.js API 兼容性说明、迁移清单和常见错误排查。

主要功能

  1. 01平台迁移决策指引
  2. 02Lambda 与 Express 迁移示例
  3. 03Node.js API 兼容性说明
  4. 04迁移检查清单
  5. 05常见迁移错误排查

适用场景

  1. 01将 Lambda 函数迁移到 Workers
  2. 02迁移 Vercel 或 Next.js 应用
  3. 03调整 Express 或 Node.js 应用
  4. 04排查不受支持的 Node.js API

安装

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

$npx skills add https://github.com/secondsky/claude-skills --skill workers-migration

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

包含的文件

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

references/
express-migration.md
lambda-migration.md
node-compatibility.md
vercel-migration.md
scripts/
analyze-migration.sh
templates/
express-adapter.ts
lambda-adapter.ts
node-compat.ts
vercel-adapter.ts

详细介绍

Workers 迁移指南

将现有应用从各种平台迁移到 Cloudflare Workers。

迁移决策树

What are you migrating from?
├── AWS Lambda
│   └── Node.js handler? → Lambda adapter pattern
│   └── Python? → Consider Python Workers
│   └── Container/custom runtime? → May need rewrite
├── Vercel/Next.js
│   └── API routes? → Minimal changes with adapter
│   └── Full Next.js app? → Use OpenNext adapter
│   └── Middleware? → Direct Workers equivalent
├── Express/Node.js
│   └── Simple API? → Hono (similar API)
│   └── Complex middleware? → Gradual migration
│   └── Heavy node: usage? → Compatibility layer
└── Other Edge (Deno Deploy, Fastly)
    └── Standard Web APIs? → Minimal changes
    └── Platform-specific? → Targeted rewrites

平台对比

特性WorkersLambdaVercelExpress
冷启动~0ms100-500ms10-100ms不适用
CPU 限制50ms/10ms15 min10s无
内存128MB10GB1GB系统
最大响应6MB(流式响应不限)6MB4.5MB无
全球边缘节点300+ PoPs区域性~20 PoPs手动
Node.js API部分支持完全支持完全支持完全支持

迁移中最常见的 10 个错误

错误来源原因解决方案
fs is not definedLambda/Express文件系统访问使用 KV/R2 存储
Buffer is not definedNode.jsNode.js 全局变量从 node:buffer 导入
process.env undefined全部环境变量访问方式使用 env 参数
setTimeout not returningLambda异步模式使用 ctx.waitUntil()
require() not foundExpressCommonJS转换为 ESM 导入
Exceeded CPU time全部长时间计算分块处理或使用 DO
body already consumedExpress请求正文读取前先克隆
Headers not iterableLambdaHeaders API使用 Headers 构造函数
crypto.randomBytesNode.jsNode crypto使用 crypto.getRandomValues
Cannot find module全部缺少 polyfill检查 Workers 兼容性

快速迁移模式

AWS Lambda 处理程序
// Before: AWS Lambda
export const handler = async (event, context) => {
  const body = JSON.parse(event.body);
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'Hello' }),
  };
};

// After: Cloudflare Workers
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const body = await request.json();
    return Response.json({ message: 'Hello' });
  },
};
Express 中间件
// Before: Express
app.use((req, res, next) => {
  if (!req.headers.authorization) {
    return res.status(401).json({ error: 'Unauthorized' });
  }
  next();
});

// After: Hono Middleware
app.use('*', async (c, next) => {
  if (!c.req.header('Authorization')) {
    return c.json({ error: 'Unauthorized' }, 401);
  }
  await next();
});
环境变量
// Before: Node.js
const apiKey = process.env.API_KEY;

// After: Workers
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const apiKey = env.API_KEY;
    // ...
  },
};

Node.js 兼容性

Workers 通过兼容性标志支持许多 Node.js API:

// wrangler.jsonc
{
  "compatibility_flags": ["nodejs_compat_v2"],
  "compatibility_date": "2024-12-01"
}

通过 nodejs_compat_v2 支持:

  • crypto(大多数方法)
  • buffer(Buffer 类)
  • util(promisify、types)
  • stream(Readable、Writable)
  • events(EventEmitter)
  • path(所有方法)
  • string_decoder
  • assert

不支持(需要替代方案):

  • fs → 使用 R2/KV
  • child_process → 无法实现
  • cluster → 不适用
  • dgram → 不支持
  • net → 使用 fetch/WebSocket
  • tls → 由平台处理

何时加载参考资料

参考资料加载时机
references/lambda-migration.md迁移 AWS Lambda 函数时
references/vercel-migration.md从 Vercel/Next.js 迁移时
references/express-migration.md迁移 Express/Node.js 应用时
references/node-compatibility.md遇到 Node.js API 兼容性问题时

迁移检查清单

  1. 分析依赖项:检查是否使用不受支持的 Node.js API
  2. 转换为 ESM:将 require() 替换为 import
  3. 更新环境变量访问方式:使用 env 参数,而不是 process.env
  4. 替换文件系统:使用 R2/KV 存储
  5. 处理异步任务:使用 ctx.waitUntil() 执行后台任务
  6. 本地测试:使用 wrangler dev 验证
  7. 性能测试:确保不超过 CPU 限制

另请参阅

  • workers-runtime-apis - Workers 中可用的 API
  • workers-performance - 优化技巧
  • cloudflare-worker-base - Workers 基本设置

评论

支持 Markdown