Token导航 LogoToken导航TokenDH.com
前端设计敏感数据github未标认证来源可访问许可证需确认审计通过

cloudflare-opennextCloudflare opennext 命令行

Agent Skill

cloudflare-opennext 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

4,422

周安装

188

GitHub Stars

公开资料未说明

下载量

1,549
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:cloudflare-opennext(Cloudflare opennext 命令行)
来源仓库:https://github.com/null-shot/cloudflare-skills
仓库路径:skills/cloudflare-opennext
安装命令:
npx skills add https://github.com/null-shot/cloudflare-skills --skill cloudflare-opennext
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/null-shot/cloudflare-skills --skill cloudflare-opennext

简介

使用 @opennextjs/cloudflare 适配器部署 Next.js 到 Workers,兼容 App/Pages Router。

  • 支持 ISR、SSG、Cloudflare 绑定(KV、R2、D1、AI)及 ORM 集成。
  • 适用于新建或迁移 Next.js 项目,解决 bundle 体积与部署兼容性问题。
  • 初始化命令包含框架选择与模板,后续通过 npm run dev/build 本地调试。
  • 需注意 Node.js 兼容标志与边缘运行时 API 差异处理。

SKILL.md

Cloudflare OpenNext

Deploy Next.js applications to Cloudflare Workers using the @opennextjs/cloudflare adapter with full support for App Router, Pages Router, ISR, SSG, and Cloudflare bindings.

When to Use

  • Creating new Next.js apps for Cloudflare Workers
  • Migrating existing Next.js apps to Cloudflare
  • Configuring ISR/SSG caching with R2, KV, or D1
  • Accessing Cloudflare bindings (KV, R2, D1, Durable Objects, AI)
  • Using databases and ORMs (Drizzle, Prisma) in Next.js
  • Troubleshooting deployment issues or bundle size problems

Getting Started

New App

npm create cloudflare@latest -- my-next-app --framework=next --platform=workers
cd my-next-app
npm run dev      # Local development with Next.js
npm run preview  # Preview in Workers runtime
npm run deploy   # Deploy to Cloudflare

Existing App Migration

# 1. Install dependencies
npm install @opennextjs/cloudflare@latest
npm install --save-dev wrangler@latest

# 2. Create wrangler.jsonc (see Configuration section)
# 3. Create open-next.config.ts
# 4. Update next.config.ts
# 5. Add scripts to package.json
# 6. Deploy
npm run deploy

Core Concepts

How OpenNext Works

The @opennextjs/cloudflare adapter:

  1. Runs next build to generate the Next.js build output
  2. Transforms the build output to work in Cloudflare Workers runtime
  3. Outputs to .open-next/ directory with worker.js entry point
  4. Uses Workers Static Assets for static files (_next/static, public)

Node.js Runtime (Not Edge)

Critical: OpenNext uses Next.js Node.js runtime, NOT the Edge runtime:

// ❌ Remove this - Edge runtime not supported
export const runtime = "edge";

// ✅ Default Node.js runtime - fully supported
// No export needed, this is the default

The Node.js runtime provides:

  • Full Node.js API compatibility via nodejs_compat flag
  • More Next.js features than Edge runtime
  • Access to all Cloudflare bindings

Configuration Files

wrangler.jsonc

Minimal configuration for OpenNext:

{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "my-nextjs-app",
  "main": ".open-next/worker.js",
  "compatibility_date": "2024-12-30",
  "compatibility_flags": [
    "nodejs_compat",                    // Required for Node.js APIs
    "global_fetch_strictly_public"      // Security: prevent local IP fetches
  ],
  "assets": {
    "directory": ".open-next/assets",   // Static files
    "binding": "ASSETS"
  },
  "services": [
    {
      "binding": "WORKER_SELF_REFERENCE",
      "service": "my-nextjs-app"        // Must match "name" above
    }
  ],
  "images": {
    "binding": "IMAGES"                 // Optional: Enable image optimization
  }
}

Required settings:

  • nodejs_compat compatibility flag
  • compatibility_date >= 2024-09-23
  • WORKER_SELF_REFERENCE service binding (must match worker name)
  • main and assets paths should not be changed

See references/configuration.md for complete configuration with R2, KV, D1 bindings.

open-next.config.ts

Configure caching and OpenNext behavior:

import { defineCloudflareConfig } from "@opennextjs/cloudflare";
import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache";

export default defineCloudflareConfig({
  incrementalCache: r2IncrementalCache,
});

This file is auto-generated if not present. See references/caching.md for cache options.

next.config.ts

Initialize OpenNext for local development:

import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  // Your Next.js configuration
};

export default nextConfig;

// Enable bindings access during `next dev`
import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare";
initOpenNextCloudflareForDev();

.dev.vars

Environment variables for local development:

# .dev.vars
NEXTJS_ENV=development

The NEXTJS_ENV variable selects which Next.js .env file to load:

  • development.env.development
  • production.env.production (default)

Accessing Cloudflare Bindings

Use getCloudflareContext() to access bindings in any route:

import { getCloudflareContext } from "@opennextjs/cloudflare";

// Route Handler (App Router)
export async function GET(request: Request) {
  const { env, cf, ctx } = getCloudflareContext();

  // Access KV
  const value = await env.MY_KV.get("key");

  // Access R2
  const object = await env.MY_BUCKET.get("file.txt");

  // Access D1
  const result = await env.DB.prepare("SELECT * FROM users").all();

  // Access Durable Objects
  const stub = env.MY_DO.idFromName("instance-1");
  const doResponse = await stub.fetch(request);

  // Access request info
  const country = cf?.country;

  // Background tasks
  ctx.waitUntil(logAnalytics());

  return Response.json({ value });
}

// API Route (Pages Router)
export default async function handler(req, res) {
  const { env } = getCloudflareContext();
  const data = await env.MY_KV.get("key");
  res.json({ data });
}

// Server Component
export default async function Page() {
  const { env } = getCloudflareContext();
  const data = await env.MY_KV.get("key");
  return <div>{data}</div>;
}

SSG Routes with Async Context

For Static Site Generation routes, use async mode:

// In SSG route (generateStaticParams, etc.)
const { env } = await getCloudflareContext({ async: true });
const products = await env.DB.prepare("SELECT * FROM products").all();

Warning: During SSG, secrets from .dev.vars and local binding values are included in the static build. Be careful with sensitive data.

TypeScript Types

Generate types for your bindings:

npx wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts

Add to package.json:

{
  "scripts": {
    "cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts"
  }
}

Run after any binding changes in wrangler.jsonc.

CLI Commands

The opennextjs-cloudflare CLI wraps Wrangler with OpenNext-specific behavior:

# Build the Next.js app and transform for Workers
npx opennextjs-cloudflare build

# Build and preview locally with Wrangler
npm run preview
# or
npx opennextjs-cloudflare preview

# Build and deploy to Cloudflare
npm run deploy
# or
npx opennextjs-cloudflare deploy

# Build and upload as a version (doesn't deploy)
npm run upload
# or
npx opennextjs-cloudflare upload

# Populate cache (called automatically by preview/deploy/upload)
npx opennextjs-cloudflare populateCache local   # Local bindings
npx opennextjs-cloudflare populateCache remote  # Remote bindings

Recommended package.json scripts:

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "preview": "opennextjs-cloudflare build && opennextjs-cloudflare preview",
    "deploy": "opennextjs-cloudflare build && opennextjs-cloudflare deploy",
    "upload": "opennextjs-cloudflare build && opennextjs-cloudflare upload",
    "cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts"
  }
}

Caching Strategies

OpenNext supports Next.js caching with Cloudflare storage:

Cache TypeUse CaseStorage Options
Incremental CacheISR/SSG page dataR2, KV, Static Assets
QueueTime-based revalidationDurable Objects, Memory
Tag CacheOn-demand revalidationD1, Durable Objects

Quick setup examples:

// Static Site (SSG only)
import staticAssetsCache from "@opennextjs/cloudflare/overrides/incremental-cache/static-assets-incremental-cache";
export default defineCloudflareConfig({
  incrementalCache: staticAssetsCache,
  enableCacheInterception: true,
});

// Small Site with ISR
import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache";
export default defineCloudflareConfig({
  incrementalCache: r2IncrementalCache,
  queue: doQueue,
  tagCache: d1NextTagCache,
});

See references/caching.md for complete caching patterns including regional cache and sharded tag cache

Image Optimization

Enable Cloudflare Images for automatic image optimization:

// wrangler.jsonc
{
  "images": {
    "binding": "IMAGES"
  }
}

Next.js <Image> components will automatically use Cloudflare Images. Additional costs apply.

Compatibility notes:

  • Supports: PNG, JPEG, WEBP, AVIF, GIF, SVG
  • minimumCacheTTL not supported
  • dangerouslyAllowLocalIP not supported

Database and ORM Patterns

Critical Rule: Never create global database clients in Workers. Create per-request:

// ❌ WRONG - Global client causes I/O errors
import { Pool } from "pg";
const pool = new Pool({ connectionString: process.env.DATABASE_URL });

// ✅ CORRECT - Per-request client
import { cache } from "react";
import { Pool } from "pg";

export const getDb = cache(() => {
  const pool = new Pool({
    connectionString: process.env.DATABASE_URL,
    maxUses: 1,  // Don't reuse connections across requests
  });
  return drizzle({ client: pool, schema });
});

// Usage in route
export async function GET() {
  const db = getDb();
  const users = await db.select().from(usersTable);
  return Response.json(users);
}

See references/database-orm.md for Drizzle and Prisma patterns.

Critical Rules

✅ DO

  1. Use Node.js runtime - Default runtime, remove any export const runtime = "edge"
  2. Create DB clients per-request - Use React's cache() for request-scoped instances
  3. Enable nodejs_compat - Required compatibility flag with date >= 2024-09-23
  4. Use getCloudflareContext() - Access bindings, not getRequestContext from next-on-pages
  5. Add.open-next to.gitignore - Build output should not be committed
  6. Use wrangler.jsonc - Not wrangler.toml (JSONC supports comments and validation)
  7. Set WORKER_SELF_REFERENCE - Service binding must match worker name
  8. Add public/_headers - Configure static asset caching headers

❌ DON'T

  1. Don't use Edge runtime - Remove export const runtime = "edge" from all routes
  2. Don't use Turbopack - Use next build, not next build --turbo
  3. Don't create global DB clients - Causes "Cannot perform I/O" errors
  4. Don't exceed 10 MiB - Worker size limit (3 MiB on free plan)
  5. Don't use next-on-pages - Different adapter, use @opennextjs/cloudflare instead
  6. Don't commit.open-next/ - Build output directory
  7. Don't use Node Middleware - Not supported (Next.js 15.2+ feature)

Supported Features

FeatureSupportNotes
App Router✅ FullAll features supported
Pages Router✅ FullIncluding API routes
Route Handlers✅ FullGET, POST, etc.
Dynamic Routes✅ Full[slug], [...slug]
SSG✅ FullStatic Site Generation
SSR✅ FullServer-Side Rendering
ISR✅ FullIncremental Static Regeneration
PPR✅ FullPartial Prerendering
Middleware✅ PartialStandard middleware works, Node Middleware (15.2+) not supported
Image Optimization✅ FullVia Cloudflare Images binding
Composable Caching✅ Full'use cache' directive
next/font✅ FullFont optimization
after()✅ FullBackground tasks
Turbopack❌ NoUse standard build

Supported Next.js versions:

  • Next.js 15: All minor and patch versions
  • Next.js 14: Latest minor version only

Development Workflow

# Local development with Next.js dev server
npm run dev

# Preview in Workers runtime (faster than deploy)
npm run preview

# Deploy to production
npm run deploy

# Update TypeScript types after binding changes
npm run cf-typegen

Local Development Notes:

  • next dev - Uses Node.js runtime, bindings available via initOpenNextCloudflareForDev()
  • npm run preview - Uses Workers runtime with Wrangler, closer to production
  • Both support hot reloading

Detailed References

Migration from @cloudflare/next-on-pages

If migrating from @cloudflare/next-on-pages:

  1. Uninstall @cloudflare/next-on-pages and eslint-plugin-next-on-pages
  2. Install @opennextjs/cloudflare
  3. Update next.config.ts:

- Remove setupDevPlatform() calls - Replace with initOpenNextCloudflareForDev()

  1. Update imports:

- Replace getRequestContext from @cloudflare/next-on-pages - Use getCloudflareContext from @opennextjs/cloudflare

  1. Remove Edge runtime exports (export const runtime = "edge")
  2. Update wrangler.jsonc with required OpenNext settings
  3. Remove next-on-pages eslint rules

Examples

Official examples in the @opennextjs/cloudflare repository:

  • create-next-app - Basic Next.js starter
  • middleware - Middleware usage
  • vercel-blog-starter - SSG blog example

Best Practices

  1. Start simple - Use Static Assets cache for SSG-only sites
  2. Add caching gradually - Enable R2 cache when you need ISR
  3. Monitor bundle size - Stay under 10 MiB compressed (use ESBuild Bundle Analyzer)
  4. Use TypeScript - Run cf-typegen to get binding types
  5. Test with preview - Use npm run preview before deploying
  6. Cache database clients - Use React's cache() for per-request instances
  7. Enable observability - Add observability to wrangler.jsonc for logging
  8. Use remote bindings for build - Enable for ISR with real data

Common Patterns

See references/configuration.md for complete examples including:

  • Custom Worker with multiple handlers (fetch, scheduled, queue)
  • Environment-specific configuration (staging, production)
  • Remote bindings for build-time data access

Resources

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.85%
按下载量换算555

Claude

29.22%
按下载量换算453

Cursor

19.49%
按下载量换算302

Gemini CLI

10.56%
按下载量换算164

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills