vinext.

快速开始

启动你的 vinext 项目

请使用下方的官方初始化命令。它们是创建或迁移 vinext 项目的推荐方式, 因为它们会替你配置依赖、scripts、Vite 以及部署目标。

01

官方初始化命令

用 create-vinext-app 新建项目

终端
bash
pnpm create vinext-app@latest my-app

它会创建一个带 Tailwind CSS 的 TypeScript App Router 项目,然后运行与已有应用相同的 vinext init 流程。生成的项目默认已准备好部署到 Cloudflare Workers;想要 Node 目标,传入--platform=node。

用 vinext init 迁移已有的 Next.js 项目

终端
bash
npx vinext init

vinext init会提示你选择部署目标,默认是 Cloudflare。Agent 必须先询问用户想要哪个目标,再传入--platform=cloudflare或 --platform=node。

02

可选:用 AI agent 迁移

如果只是想要直接、可重复的迁移,更推荐 vinext init。如果你想让 AI agent 来排查兼容性问题并引导迁移,vinext 还附带了一个可选的 Agent Skill。

该 skill 可以与 Claude Code、OpenCode、Cursor、Codex 以及数十种其他 AI 编程工具配合使用:

终端
bash
npx skills add cloudflare/vinext

然后在任意受支持的工具中打开你的 Next.js 项目并输入:

AI 工具输入框
migrate this project to vinext

该 skill 会处理兼容性检查、依赖安装、配置生成,以及开发服务器启动。它了解 vinext 支持哪些能力,并会标记出需要人工介入的地方。

03

或者手动操作

1. 安装依赖

终端
bash
npm install vinext
npm install -D vite @vitejs/plugin-react

如果你使用 App Router,还需安装:

终端
bash
npm install react-server-dom-webpack
npm install -D @vitejs/plugin-rsc

2. 添加 Vite 配置

vite.config.ts
ts
import { defineConfig } from "vite";
import vinext from "vinext";

export default defineConfig({
  plugins: [vinext()],
});

vinext()插件会自动探测你的 app/ 或pages/ 目录,并加载next.config.js。

3. 用 Vite 进行开发与构建

package.json
json
{
  "scripts": {
    "dev": "vite dev",
    "build": "vite build",
    "start": "vinext start"
  }
}
终端
bash
npx vite dev        # 带 HMR 的开发服务器
npx vite build      # 生产构建
npx @vinext/cloudflare deploy  # 构建并部署到 Cloudflare Workers

你已有的 pages/、app/、next.config.js、public/目录都可以原样工作。先运行 vinext check扫描已知兼容性问题,或使用 vinext init 来自动化完成整次迁移。

04

CLI 参考

命令说明
vite dev启动带 HMR 的开发服务器
vite build生产构建(App Router 多环境:RSC + SSR + 客户端)
vinext start启动本地生产服务器用于测试
npx @vinext/cloudflare deploy构建并部署到 Cloudflare Workers
vp exec vinext-cloudflare deploy配合 Vite+ 构建并部署到 Cloudflare Workers
vinext init将 Next.js 项目迁移到 vinext 下运行
vinext check在迁移前扫描你的 Next.js 应用的兼容性问题
vinext lint委托给 eslint 或 oxlint

vinext dev 与vinext build仍然作为项目本地 Vite 命令的轻量别名存在。它们需要一个 Vite 配置;如果缺失,请先运行vinext init。 这两个命令的选项、输出与退出行为都由 Vite 掌管。对于较早配置好的项目,这些别名仍会在 Vite 读取配置前预加载 dotenv, 并在某个明确的默认 Vite 配置需要 ESM 迁移时添加"type": "module"(把已知的 CommonJS 配置文件重命名为 .cjs)。 显式的 "type": "commonjs"永远不会被改动。直接使用 vite dev 与vite build 不会执行这些包装层兼容性步骤。

@vinext/cloudflare deploy 的选项

--preview--env <name>--name <name>--skip-build--dry-run--warm-cache--traffic-aware-warm-cache

使用 --env <name> 来选择构建与部署所用的 Vite 模式。--preview 是 --env preview 的简写。

vinext init 的选项

--platform=cloudflare | --platform=node跳过平台选择提示(默认 Cloudflare)
--port <port>端口号,默认 3001
--skip-check跳过兼容性报告
--force替换已有的 Node 目标 Vite 配置
--legacy-wrangler-cloudflare-init保留旧的 Wrangler 配置(init 与 create-vinext-app 均接受)

Cloudflare 的 init 默认使用 cf 与cloudflare.config.ts。 已有的 Wrangler 配置不会被自动迁移。

若 next.config.* 设置了 output: "standalone",vite build 会在 dist/standalone/ 输出一个自托管包:
终端
bash
node dist/standalone/server.js

环境变量:PORT(默认 3000)、HOST(默认 0.0.0.0)。

05

新建一个 vinext 项目

新项目请使用 create-vinext-app。 它会创建一个带 Tailwind CSS 的 TypeScript App Router 项目,然后运行与已有应用相同的 vinext init 流程:

终端
bash
pnpm create vinext-app@latest my-app

生成的项目默认已准备好部署到 Cloudflare Workers。如果你想要 Node 目标,传入--platform=node。

06

迁移已有的 Next.js 项目

vinext init 用一条命令自动化完成迁移:

  1. 运行 vinext check 扫描兼容性问题

  2. 将 vinext 运行时包安装为依赖,将 Vite/插件工具安装为 devDependencies

  3. 把 CJS 配置文件(例如 postcss.config.js → .cjs)重命名以避免 ESM 冲突

  4. 向 package.json 添加 "type": "module"

  5. 向 package.json 添加 dev:vinext、build:vinext、start:vinext 脚本

  6. 提示选择部署平台(默认 Cloudflare,或 Node)

  7. 生成对应的 vite.config.ts

  8. 对于 Cloudflare,为 cf 与 Cloudflare Vite plugin v2 生成 cloudflare.config.ts

终端
bash
npm run dev:vinext    # 启动 vinext 开发服务器(端口 3001)
npm run build:vinext  # 用 vinext 构建生产输出
npm run start:vinext  # 启动 vinext 生产服务器
npm run dev           # 仍像以前一样运行 Next.js

平台与配置选项

使用 --platform=cloudflare 或--platform=node 可以跳过平台选择提示。 Cloudflare 的 init 会通过 AST 更新已有的 JavaScript 或 TypeScript Vite 配置,保留不相关的设置。使用--force 可替换已有的 Node 目标 Vite 配置, 或使用 --skip-check 跳过兼容性报告。

vinext 面向 Vite 8,后者默认使用 Rolldown、Oxc、Lightning CSS,以及更新的浏览器基线。 如果你从更旧的配置带来自定义的 Vite 配置或插件,请优先使用oxc、optimizeDeps.rolldownOptions、build.rolldownOptions, 而非旧的 esbuild 与build.rollupOptions 开关; 如果你仍然需要支持旧浏览器,请覆盖 build.target。 如果某个依赖因更严格的 CommonJS 默认导入处理而报错,请修正导入,或临时使用legacy.inconsistentCjsInterop: true 作为逃生舱。 详见 Vite 8 迁移指南。

07

环境变量加载(.env*)

vinext 会自动为 dev、build、start、deploy 加载 dotenv 文件。 Vite 会在插件钩子之前、不论导入顺序地求值所有静态配置导入。vinext dev 与vinext build会在移交给 Vite 之前,从项目根目录预加载 dotenv,从而保留旧 CLI 在配置期的这种行为。 直接用 vite dev 与vite build 则不会。 为了让配置期的值在两种命令下都可用,请在配置工厂中使用 Vite 的loadEnv(mode, process.cwd(), ""), 并读取它返回的值,而不是在静态导入中依赖 process.env。 空前缀会包含仅服务端的变量;如果你有自己的 envDir,请用它替换 process.cwd()。

加载顺序(优先级从高到低)

  1. 1.已有的 process.env 值(shell/CI)
  2. 2..env.<mode>.local
  3. 3..env.local(在 mode 为 test 时跳过)
  4. 4..env.<mode>
  5. 5..env

模式

  • vite dev 使用 development
  • vite build、vinext start、@vinext/cloudflare deploy 使用 production
  • vinext dev 与 vinext build 使用对应的模式,包括 --mode 覆盖

覆盖行为与客户端暴露

  • 支持变量展开($VAR / ${VAR})
  • NEXT_PUBLIC_* 变量会被内联供浏览器使用
  • next.config.js 的 env 项也会被内联
  • 其他环境变量保持仅服务端,除非你通过 Vite 显式暴露(例如 VITE_* + import.meta.env)
  • 要覆盖任意 .env* 值,请在运行 vinext 之前于你的 shell/CI 环境中设置它。已有的 process.env 始终优先。