Vike

最近更新时间:2026-04-17 17:56:51

我的收藏
Vike 是基于 Vite 的全栈 Web 框架,采用文件式路由与约定优于配置,适合从静态站点到动态应用等多种场景。
注意:
@edgeone/vite 适配器从 2.0 版本起采用 Universal Deploy 协议,需要 Vike ≥ 0.4.257、Node.js 18+ 和 Vite 7+。尚未升级到 Vike 0.4.257 的项目,请继续使用 @edgeone/vite@1

核心特点(Vike)

文件式路由:基于 pages/ 目录的约定文件(+Page.*+config.ts+data.ts+onBeforeRender.ts 等)自动生成路由,支持动态路由(如 pages/posts/@category/@slug/)。
按页配置:每个路由可独立设置 prerenderstreampassToClient 等,实现按页的 SSG、流式或 SSR,无需全局一刀切。
数据与生命周期:通过 +data.ts 在服务端取数并注入页面,通过 +onBeforeRender 在渲染前修改 pageContext,数据与渲染逻辑清晰分离。
多视图层:主应用可用 React(vike-react)、Vue(vike-vue)或 Svelte(vike-svelte);同一项目内也可按路由使用不同框架。
Vite 驱动:构建与开发均基于 Vite,支持快速 HMR、代码分割与 TypeScript,与现有 Vite 生态兼容。

优势

轻量灵活:与 Vite 生态无缝集成,开发与构建体验一致,HMR 迅速、打包高效。
按页控制:同一项目内可按路由选择 SSR、SSG 或流式渲染,无需全局统一方案,便于做性能与 SEO 优化。
多框架可选:支持 React、Vue、Svelte,甚至在同一应用中按路由使用不同视图层,迁移或混用成本低。
类型友好:与 TypeScript 配合良好,pageContext、路由参数与数据流可端到端类型化。
场景覆盖广:从静态站点、文档站到带鉴权与动态数据的应用均可胜任,部署方式灵活。

快速开始

在 EdgeOne Pages 上开始部署 Vike 项目:
通过 Git 仓库导入 Vike 项目。
从 Pages 的模板库选择 Vike 模板。
使用下述 Vike 示例项目。

本模板中页面与框架的对应关系为:首页 `/` → ReactSSG 页 `/ssg` → VuePosts 动态路由 `/posts/@category/@slug` → Svelte,便于体验同一应用内按路由切换视图层。
查看更多 Pages 的模板,可以访问 Pages 模板库

Pages 对 Vike 的支持

Pages 通过 @edgeone/vite 适配器支持 Vike 项目。下表为目前支持的关键特性,平台会持续完善支持,实验性功能可能尚未完全稳定。
Vike 特性
支持情况
文件式路由(pages/)
支持
服务端渲染 (SSR)
支持
静态站点生成 (SSG / prerender)
支持
HTML 流式传输 (stream)
支持
动态路由(@param)
支持
多视图层(React / Vue / Svelte)
支持
数据与生命周期(+data.ts 等)
支持
服务端 API 接口
不支持

在 Pages 部署 Vike 项目

Pages 通过 @edgeone/vite 适配器部署 Vike 项目。从 2.0 版本开始,适配器基于 Universal Deploy(简称 UD)—— 一套 Vite 生态的通用部署协议,力求一个适配器覆盖所有 Vite 全栈框架的部署。
Vike 在启用 server: true 后,会在构建过程中将自己的服务端入口注册到 UD store 中;@edgeone/vite 适配器只需从 store 中读取这些入口,就能自动完成打包和部署产物生成,无需针对 Vike 做任何特殊处理。这意味着:
通用的 Vite 适配器: 目前@edgeone/vite已支持 Vike、TanStack Start 和原生 Vite SSR,未来任何接入 UD 协议的 Vite 全栈框架都将自动获得 Pages 部署能力,无需等待适配器更新。
零框架配置:你不需要手动指定 `serverWrapper`、`serverEntry` 等框架特定参数(这些是旧版适配器的做法),适配器通过 UD 协议自动发现一切。
天然解耦:框架升级不会影响适配器兼容性,适配器升级也不会破坏框架行为,两者通过 UD 协议独立演进。

1. 安装 Pages 的 Vike 适配器

@edgeone/vite 适配器可将 Vike(基于 Vite)应用的构建结果自动适配到 Pages 平台。安装命令:
npm install @edgeone/vite
@edgeone/vite 适配器有两个主要版本:2.x(基于 UD 协议,推荐)适用于 Vike ≥ 0.4.257;1.x 适用于更早的 Vike 版本。请根据你的 Vike 版本参考对应的配置步骤。

2. 配置 vite.config

在项目的 vite.config.ts(或 vite.config.js)中接入适配器。2.x 通过 UD 协议自动发现框架入口,不再需要 1.x 中的 serverWrapper 参数来指定框架:
// ——— 适配器 2.x ———
import { defineConfig } from "vite";
import vike from "vike/plugin";
import { edgeoneAdapter } from "@edgeone/vite"; // 命名导出

export default defineConfig({
plugins: [vike(), ...edgeoneAdapter()], // 展开运算符,无需框架参数
});

// ——— 适配器 1.x ———
import { defineConfig } from "vite";
import vike from "vike/plugin";
import edgeone from "@edgeone/vite"; // 默认导出

export default defineConfig({
plugins: [vike(), edgeone({ serverWrapper: "vike" })], // 需指定 serverWrapper
});

3. 配置 Vike

适配器 2.x 需要先在 pages/+config.ts 中启用 server: true,让 Vike 将服务端入口注册到 UD store,1.x 则无需此步骤:
// pages/+config.ts(仅 2.x 需要)
export default {
server: true,
}

4. 部署项目

Git 连接部署
集成好适配器后,将项目提交到 GitHub 或 GitLab,然后使用 Git 连接部署
CLI 部署
安装 Pages 的脚手架工具(参考 EdgeOne CLI),配置完成后使用命令部署:
edgeone pages deploy

服务端渲染 (SSR)

Vike 中未设置 prerender: true 的页面默认即为服务端渲染:每次请求时在服务器执行数据逻辑并渲染页面,再返回完整 HTML。
数据:在 +data.ts 中定义服务端数据函数,返回值会注入 pageContext,页面组件通过 usePageContext() 或 props 使用;支持 async,便于请求时拉取 API、读 Cookie 等。
渲染前钩子+onBeforeRender.ts 在渲染前执行,可修改 pageContext、做重定向或根据 routeParams/请求信息决定是否渲染。
按页独立:SSR 与 SSG/流式按路由配置,同一应用里部分页面 SSR、部分预渲染即可。
构建设置: 构建命令 npm run build(内部 vike build),输出目录 dist(由 Vite + @edgeone/vite 生成)。

静态站点生成(SSG)

若希望某页在构建时预渲染为静态 HTML,可在该页的 +config.ts 中设置 prerender: true。构建阶段会生成对应静态文件,部署后直接命中静态文件的路由,无需每次请求时在服务端渲染。
示例(pages/ssg/+config.ts):
export default {
prerender: true,
};

流式渲染

流式渲染指服务端不等待整页就绪,而是先输出部分 HTML(如壳或首屏),再按块持续推送后续内容,从而改善 TTFB 和首屏体验。Pages 部署 Vike 项目在页面维度支持该能力:在对应路由的 +config.ts 中设置 stream: true 即可启用该页的 HTML 流式输出,与 SSR/SSG 一样按页配置、可与其他路由混用。
视图层如何配合取决于所用框架(如异步组件、数据依赖的边界等),由各框架的约定与 API 决定;Pages 对 Vike 流式响应只负责在服务端按配置开启。
示例(pages/stream/+config.ts):
import type { Config } from "vike/types";

export default {
stream: true,
} satisfies Config;

更多资源