EdgeOne CDN边缘函数本地调试开发工具

# 前言 因为EdgeOne并没有提供CDN产品边缘函数的本地调试工具,为了能更好的开发腾讯云EdgeOne CDN边缘函数,方便开发调试,于是我写了 一个基于Node.js开发的本地模拟器,可在本地直接模拟EdgeOne的CDN边缘函数环境测试边缘函数代码 # Github仓库 ![github](zeroqms/edge-function) # 详情 EdgeJS 是一个用于本地开发和测试 EdgeOne CDN 边缘函数的模拟器。它模拟了 EdgeOne 边缘函数的运行时环境,让你可以在本地轻松 开发和调试边缘函数代码。 ## 特性 - 完整的边缘函数 API 模拟 - `addEventListener('fetch', ...)` 事件监听 - `Request` / `Response` 对象 - `caches` 缓存 API - `env` 环境变量支持 - 图片处理支持 - 基于 `sharp` 库 - 支持格式转换 (WebP, JPEG, PNG, AVIF) - 支持图片缩放 - 响应压缩 - 自动 Gzip / Brotli 压缩 - 可配置压缩阈值和类型 - 错误回源 - 边缘函数异常时自动回退到源站 - 支持超时处理和重定向控制 - 增强的控制台 - 带时间戳和日志级别 - 支持 `console.time` / `timeEnd` / `count` / `group` 等 ## 系统要求 - Node.js >= 16.0.0 - npm 或 yarn ## 安装 ```bash git clone <repository-url> cd edgejs npm install ``` ## 快速开始 1. 启动模拟器: ```bash npm start ``` 2. 按照提示输入: - 边缘函数 JS 文件路径(如 `example.js`) - 回源地址(可选) - 监听端口(默认 8080) 3. 访问 `http://localhost:8080` 测试你的边缘函数 ### 开发模式(自动重启) ```bash npm run dev ``` ## 示例边缘函数 ```javascript // example.js addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { const url = new URL(request.url); // 返回 JSON 响应 if (url.pathname === '/api') { return new Response(JSON.stringify({ message: 'Hello from Edge!', timestamp: new Date().toISOString() }), { headers: { 'Content-Type': 'application/json' } }); } // 图片处理示例 if (url.pathname === '/image') { const imageUrl = url.searchParams.get('url'); const format = url.searchParams.get('format') || 'webp'; const width = url.searchParams.get('width'); const height = url.searchParams.get('height'); return fetch(imageUrl, { eo: { image: { format, width, height } } }); } // 使用缓存 if (url.pathname === '/cached') { const cache = caches.default; const cachedResponse = await cache.match(request); if (cachedResponse) { return cachedResponse; } const response = await fetch('https://api.example.com/data'); await cache.put(request, response.clone()); return response; } // 环境变量 if (url.pathname === '/env') { return new Response(`API_KEY: ${env.API_KEY || 'not set'}`); } return new Response('Hello from Edge Function!'); } ``` ## 测试示例 项目包含一个示例文件 `example.js`,提供了以下测试端点: | 端点 | 说明 | |------|------| | /manual-redirect | 手动处理重定向 | | /error-redirect | 重定向报错测试 | | /large-text | 响应压缩测试 | 启动后访问 `http://localhost:8080/manual-redirect` 即可测试。 ## 配置 ### 环境变量 在项目根目录创建 `.env` 文件: ```env API_KEY=your-api-key DEBUG=true MAX_RETRIES=3 ``` ### 模拟器配置 在 `main.js` 中的 `CONFIG` 对象可以调整: ```javascript const CONFIG = { fetchTimeout: 15000, // fetch 超时时间 (ms) showStack: true, // 是否显示错误堆栈 consolePrefix: true, // 控制台前缀 maxRedirects: 12, // 最大重定向次数 compressMinSize: 256, // 压缩最小大小 (bytes) compressibleTypes: [ // 可压缩的 MIME 类型 'text/', 'application/json', // ... ], }; ``` ## 架构 ``` +-----------------------------------------------------+ | HTTP Server | | (Node.js http) | +-----------------+-----------------------------------+ | v +-----------------------------------------------------+ | Edge Function Runtime | | +---------+ +---------+ +---------------------+ | | | caches | | env | | fetch (enhanced) | | | +---------+ +---------+ +---------------------+ | | +---------+ +---------+ +---------------------+ | | | console | | sharp | | compression | | | +---------+ +---------+ +---------------------+ | +-----------------------------------------------------+ ``` ## 依赖 - [sharp](https://sharp.pixelplumbing.com/) - 高性能图片处理 ## 贡献 欢迎提交 Issue 和 Pull Request。 ## 许可证 ISC ## 注意事项 1. 此模拟器用于本地开发测试,生产环境请使用 EdgeOne 官方服务 2. 部分边缘函数 API 可能与真实环境存在差异 3. 图片处理需要系统支持 libvips(sharp 依赖)

©2026 秋名山香蕉 ,文章内容采用 CC BY-NC-SA 4.0 许可

SupabaseTencent Cloud 强力驱动

萌ICP备20250480号

友链:速查分 & FFmpeg编译版下载站