返回项目目录
前端框架精选项目

Nuxt

基于 Vue 的全栈 Web 框架,统一路由、服务端渲染、数据获取与后端 API。

主要语言TypeScript
开源许可MIT
项目类型前端框架
维护状态活跃维护
OVERVIEW

项目概述

Nuxt 以 Vue 3 为界面基础,以 Nitro 为服务端引擎,支持服务端渲染、静态生成、混合渲染和多平台部署,适合从内容站到完整产品的现代 Web 应用。

Nuxt 是建立在 Vue 3 之上的开源全栈 Web 框架,使用约定式目录把页面、布局、路由中间件、组件、组合式函数和服务端代码组织在同一个项目中。Nuxt 4 默认把应用代码放入 app 目录,通过 Vue Router 生成文件路由,并以服务端渲染交付首屏 HTML,随后在浏览器完成 Hydration。数据层提供 SSR 安全的 useFetch、useAsyncData 与 $fetch;server 目录则由 Nitro 和 h3 驱动,可直接编写 API Route、Middleware、插件及定时任务。routeRules 能让不同 URL 分别采用预渲染、服务端渲染、缓存、重定向或纯客户端模式,构建结果可部署到 Node.js、Serverless、Edge 或静态托管平台。Nuxt 还拥有自动导入、类型生成、DevTools 与模块生态,为 Vue 团队提供从界面到服务端和部署的连贯开发路径。

当前版本Nuxt 4.5
界面基础Vue 3
服务端引擎Nitro + h3
FEATURES

主要特点

Nuxt 把 Vue 应用所需的路由、渲染、数据、服务端能力和部署输出整合为一套约定明确的全栈工具链。

01

约定式文件路由

app/pages 自动生成 Vue Router 路由,动态参数、嵌套路由、布局与 Route Middleware 都通过目录和文件约定组织。

02

服务端渲染与 Hydration

默认在服务器生成完整 HTML 以改善首屏和 SEO,再在浏览器激活 Vue 组件,客户端导航继续保持应用式体验。

03

SSR 安全的数据获取

useFetch 和 useAsyncData 会协调服务端请求、Payload 序列化、去重、缓存与客户端恢复,避免初次加载重复获取数据。

04

Nitro 全栈服务端

在 server/api 和 server/routes 中使用 h3 与 Web API 编写后端端点,也可添加 Middleware、插件、存储和服务端工具。

05

混合渲染与 Route Rules

可按路由选择预渲染、SSR、SWR 缓存、重定向或关闭 SSR,让营销页、商品页和后台采用各自合适的策略。

06

自动导入与类型生成

组件、组合式函数、Vue API 与 Nuxt 工具可自动导入;应用、服务端、共享代码和配置拥有分离的 TypeScript 上下文。

07

模块与开发工具

Nuxt Modules 可统一接入图片、内容、字体、认证、监控等能力,Nuxt DevTools 用于检查路由、组件、Payload 和运行状态。

08

通用部署输出

Nitro 根据 Preset 为 Node.js、Serverless、Edge 和静态环境生成输出,并为许多托管平台提供自动检测或零配置适配。

USE CASES

适用场景

适合熟悉 Vue、需要 SEO 或服务端能力,并希望在一个代码库中完成页面、API 与多平台部署的团队。

内容、媒体与文档网站

SSR、预渲染、SEO Meta 和内容模块适合博客、文档、新闻、营销站及需要搜索引擎收录的页面。

电商与目录平台

商品列表可预渲染或缓存,价格、库存和账户区域按请求渲染,并通过 Nitro API 连接业务服务。

SaaS 与会员产品

文件路由、Middleware、服务端 API 和 Vue 组件生态可覆盖登录、仪表盘、设置与订阅流程。

企业门户与管理系统

Vue 的渐进式组件模型、统一目录和 TypeScript 支持适合长期演进的后台、门户和内部工具。

多地区与多渠道站点

可结合国际化、Headless CMS、Route Rules 与 CDN 缓存构建多语言、多市场和多内容源站点。

Vue 团队的全栈应用

前后端共享 TypeScript 类型和仓库约定,团队无需为路由、SSR 与 API 重新拼装彼此独立的框架。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Nuxt 擅长的地方

  • 在 Vue 之上提供官方、完整且约定一致的全栈开发路径
  • 默认 SSR,并可对每条路由混合使用预渲染、缓存和客户端渲染
  • useFetch 与 useAsyncData 处理服务端到客户端的数据传递和重复请求问题
  • Nitro API 与页面共处一个仓库,适合 BFF 和中小型后端逻辑
  • 自动导入、类型生成和 DevTools 减少样板代码并改善开发体验
  • 模块生态覆盖内容、图片、UI、国际化、认证和可观测性等常见需求
  • Nitro 输出具备较好的部署可移植性,可面向 Node、Serverless、Edge 或静态托管

需要注意

采用前应考虑的问题

需要扎实的 Vue 基础

Nuxt 自动处理很多集成工作,但组件响应式、Composition API、生命周期和 Vue Router 心智模型仍是排查问题的基础。

区分服务端与浏览器环境

SSR 阶段不存在 window、document 和 localStorage;浏览器专用代码应放入 onMounted、客户端插件或使用 .client 文件后缀。

正确选择数据 API

页面首屏通常使用 useFetch 或 useAsyncData,交互事件使用 $fetch;键、缓存和 Payload 选择不当会导致重复请求或 HTML 体积增加。

Hydration 不等于零客户端 JavaScript

默认 Vue 页面仍会发送并激活客户端代码;内容型页面应控制依赖和组件边界,必要时使用预渲染或 noScripts 等策略。

部署平台仍有差异

Nitro 提供统一接口,但文件系统、数据库连接、流式响应、冷启动和 Edge Runtime 限制仍取决于实际托管平台。

模块兼容性需要核对

社区模块的维护质量和 Nuxt 4 兼容进度不同,升级框架前应检查认证、内容和 UI 等关键模块的发布状态。

主要版本演进较快

Nuxt 4.5 已开始为 Nuxt 5 铺路,而 Nuxt 3 将于 2026 年 7 月 31 日结束生命周期;项目需要保留升级和回归测试预算。

服务端安全不会自动完成

Nitro Route 仍需进行输入验证、身份认证、授权、限流和安全响应头配置,Runtime Config 中的私密值也不能暴露给 public。

QUICK START

快速开始

使用 Nuxt 4 创建项目,并实现一个由 Nitro API 提供数据、支持 SSR 与按路由缓存的项目目录页。

1创建 Nuxt 4 项目
bash
npm create nuxt@latest nuxt-catalog
cd nuxt-catalog
npm run dev
2创建项目目录页面
vue
<script setup lang="ts">
type Project = {
  id: number;
  name: string;
  description: string;
};

const { data: projects, status, error } =
  await useFetch<Project[]>("/api/projects");

useSeoMeta({
  title: "开源项目",
  description: "发现值得关注的开源项目",
});
</script>

<template>
  <main>
    <h1>开源项目</h1>
    <p v-if="status === 'pending'">正在加载…</p>
    <p v-else-if="error">加载失败</p>
    <ul v-else>
      <li v-for="project in projects" :key="project.id">
        <strong>{{ project.name }}</strong>
        <p>{{ project.description }}</p>
      </li>
    </ul>
  </main>
</template>
3添加 Nitro API Route
typescript
export default defineEventHandler(() => {
  return [
    {
      id: 1,
      name: "Nuxt",
      description: "基于 Vue 的全栈 Web 框架",
    },
    {
      id: 2,
      name: "Nitro",
      description: "可移植的服务端引擎",
    },
  ];
});
4验证提交并返回类型化错误
typescript
export default defineEventHandler(async (event) => {
  const body = await readBody<{ name?: string }>(event);
  const name = body.name?.trim();

  if (!name || name.length > 80) {
    throw createError({
      statusCode: 422,
      statusMessage: "项目名称不合法",
    });
  }

  setResponseStatus(event, 201);
  return {
    id: crypto.randomUUID(),
    name,
  };
});
5配置混合渲染策略
typescript
export default defineNuxtConfig({
  routeRules: {
    "/": { prerender: true },
    "/projects/**": { swr: 3600 },
    "/dashboard/**": { ssr: false },
    "/api/**": {
      cors: true,
      cache: { maxAge: 60 },
    },
  },
});

下一步:当前 Nuxt 4 文档要求 Node.js 22 或更新版本,并建议使用活跃的 LTS。初始页面数据优先使用 useFetch 或 useAsyncData,按钮提交等用户事件再使用 $fetch。

ALTERNATIVES

类似项目

这些框架同样提供文件路由、服务端渲染、数据加载和全栈能力,但采用不同的 UI 模型与部署约定。

COMPARISON

Nuxt vs Next.js

Nuxt 与 Next.js 都是成熟的全栈 Web 框架,提供文件路由、服务端渲染、数据获取、API 和混合部署。最根本的区别是 Nuxt 围绕 Vue、Nitro 与 Composables 构建,而 Next.js 围绕 React、Server Components 和 Server Actions 构建。

比较维度NuxtNext.js
界面基础Vue 3、单文件组件与 Composition APIReact、JSX/TSX、Server 与 Client Components
路由约定app/pages、layouts 与 Route MiddlewareApp Router、嵌套 Layout、Loading 与 Middleware
服务端Nitro、h3、server/api 与 Server RoutesRoute Handlers、Server Actions 与 Next Runtime
数据获取useFetch、useAsyncData、$fetch 与 PayloadServer Component fetch、缓存 API 与客户端库
渲染策略SSR 默认,routeRules 配置预渲染、SWR 或 SPARSC 默认,静态/动态渲染、ISR 与流式响应
客户端边界Vue 页面默认 Hydration,可使用 ClientOnly 等控制通过 use client 明确客户端组件边界
部署倾向Nitro 多平台 Preset,强调可移植输出可多平台部署,对 Vercel 能力集成最完整
更适合Vue 团队、内容与全栈产品、多平台部署React 团队、复杂产品及依赖 RSC 生态的应用
如何选择

如果团队已采用 Vue、偏好单文件组件和 Composables,并重视 Nitro 的跨平台部署与统一模块生态,Nuxt 是自然选择;如果团队以 React 为核心、需要 Server Components、Server Actions 或深度使用 Vercel 平台,Next.js 更合适。两者都应通过真实的认证、数据缓存和目标部署平台验证运行时边界,而不是只比较基础路由示例。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 26 日
核验版本官方当前稳定版与文档主线
内容维护Docs100 编辑整理
项目维护状态活跃维护

本次核验覆盖 Nuxt 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 25 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 25 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库