Nuxt4阶段一:环境搭建与第一个 Nuxt 4 项目

Nuxt4阶段一:环境搭建与第一个 Nuxt 4 项目

学习目标 :安装开发环境、创建 Nuxt 4 项目、理解目录结构、跑通第一个页面。

预计时间 :2--3 天

前置要求:会一点 HTML/CSS/JS;了解 Vue 3 Composition API 更佳(不了解也可边学边用)。


1. 为什么学 Nuxt 4?

Nuxt 是基于 Vue 3 的全栈 Web 框架。用它你可以:

  • 文件即路由的方式快速搭页面
  • 默认支持 SSR(服务端渲染),对 SEO 友好
  • 自动导入组件和 composables,少写样板代码
  • 内置 Nitro 服务端引擎,直接写 API
  • 一套代码可部署到 Node、Vercel、Cloudflare 等多种平台

Nuxt 4 相比 Nuxt 3 的重点升级:

变化 对你意味着什么
默认 app/ 目录 应用代码更清晰,和 server 分离
Singleton 数据层 相同 key 的请求自动共享,少重复请求
TypeScript 项目分离 app / server / shared 类型互不干扰
更快的 CLI 开发启动更丝滑

官方文档:https://nuxt.com/docs/4.x


2. 安装开发环境

2.1 安装 Node.js

Nuxt 4 需要 Node.js 20+(推荐 LTS)。

验证:

bash 复制代码
node -v
# 应输出 v20.x 或更高,例如 v24.4.1

npm -v

2.2 安装 pnpm(推荐)

pnpm 更快、更省磁盘,Nuxt 生态也常用:

bash 复制代码
npm install -g pnpm
pnpm -v

也可以用 npm / yarn,本文统一用 pnpm

2.3 编辑器建议

  • CursorVS Code
  • 推荐安装扩展:
    • Vue - Official(Volar)
    • TypeScript Vue Plugin (Volar)
    • ESLint / Prettier(可选)

3. 创建第一个 Nuxt 4 项目

在你的学习目录下执行:

bash 复制代码
# 在空目录初始化(当前目录有内容时可用 --force,请先确认)
pnpm dlx nuxi@latest init .

# 或新建子目录
# pnpm dlx nuxi@latest init my-nuxt-app
# cd my-nuxt-app

交互提示时建议选择:

  • Package manager:pnpm
  • 是否立即安装依赖:Yes
  • 是否初始化 Git:按需

安装完成后启动开发服务器:

bash 复制代码
pnpm install   # 若未自动安装
pnpm dev

浏览器打开:http://localhost:3000

看到 Nuxt 欢迎页,说明环境 OK。

常用脚本:

命令 作用
pnpm dev 开发模式(热更新)
pnpm build 生产构建
pnpm preview 本地预览生产构建
pnpm generate 生成静态站点(SSG)

4. 认识 Nuxt 4 目录结构

初始化后,典型结构如下(Nuxt 4 默认使用 app/):

text 复制代码
your-project/
├── app/
│   ├── app.vue              # 应用根组件
│   ├── pages/               # 页面 → 自动生成路由
│   ├── layouts/             # 布局模板
│   ├── components/          # 组件(自动导入)
│   ├── composables/         # 组合式函数(自动导入)
│   ├── middleware/          # 路由中间件
│   ├── plugins/             # 插件
│   ├── assets/              # 需构建处理的资源(css、图片等)
│   └── utils/               # 工具函数(自动导入)
├── server/
│   ├── api/                 # API 路由 → /api/*
│   ├── middleware/          # 服务端中间件
│   └── utils/               # 仅服务端可用的工具
├── public/                  # 原样拷贝的静态文件(favicon 等)
├── shared/                  # 前后端共享代码(类型、常量)
├── nuxt.config.ts           # Nuxt 配置入口
├── package.json
└── tsconfig.json

关键概念

目录/文件 一句话理解
app/pages 放页面,文件路径 = URL
app/layouts 套在页面外的壳(导航、页脚)
app/components 可复用 UI,写了就能用,不用 import
server/api 后端接口,写文件就有 /api/xxx
nuxt.config.ts 模块、样式、运行时配置都在这

5. 动手改第一个页面

5.1 看根组件 app/app.vue

Nuxt 默认大致是这样:

html 复制代码
<template>
  <div>
    <NuxtRouteAnnouncer />
    <NuxtWelcome />
  </div>
</template>

要启用真正的页面路由,把它改成:

html 复制代码
<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>

说明:

  • <NuxtLayout>:渲染当前布局
  • <NuxtPage>:渲染 pages/ 里匹配到的页面

5.2 创建首页 app/pages/index.vue

html 复制代码
<script setup lang="ts">
const title = '我的第一个 Nuxt 4 页面'
</script>

<template>
  <main class="home">
    <h1>{{ title }}</h1>
    <p>你好,欢迎开始 Nuxt 4 学习之旅。</p>
    <NuxtLink to="/about">去关于页 →</NuxtLink>
  </main>
</template>

<style scoped>
.home {
  max-width: 640px;
  margin: 4rem auto;
  padding: 0 1rem;
  font-family: system-ui, sans-serif;
}
h1 {
  font-size: 2rem;
}
a {
  color: #00dc82;
}
</style>

5.3 创建关于页 app/pages/about.vue

html 复制代码
<script setup lang="ts">
useSeoMeta({
  title: '关于我',
  description: '这是 Nuxt 4 学习计划阶段一的关于页',
})
</script>

<template>
  <main class="about">
    <h1>关于</h1>
    <p>这是第二页。文件名 about.vue → 路由 /about。</p>
    <NuxtLink to="/">← 返回首页</NuxtLink>
  </main>
</template>

<style scoped>
.about {
  max-width: 640px;
  margin: 4rem auto;
  padding: 0 1rem;
  font-family: system-ui, sans-serif;
}
</style>

保存后刷新:

  • http://localhost:3000/ → 首页
  • http://localhost:3000/about → 关于页

这就是文件路由:路径由文件决定,不用手写路由表。


6. 配置文件初识 nuxt.config.ts

打开 nuxt.config.ts,先认识几个常用项:

ts 复制代码
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  compatibilityDate: '2025-07-15',

  // 开发工具
  devtools: { enabled: true },

  // 全局 CSS(路径相对项目根,或用 ~/assets)
  // css: ['~/assets/css/main.css'],

  // 运行时配置(密钥放服务端,公开配置放 public)
  runtimeConfig: {
    // 仅服务端可读
    apiSecret: '',
    public: {
      // 客户端也能读
      appName: 'Nuxt Tutorial',
    },
  },
})

读取公开配置(任意组件/页面里):

ts 复制代码
const config = useRuntimeConfig()
console.log(config.public.appName)

环境变量约定:

  • NUXT_API_SECRET → 映射到 runtimeConfig.apiSecret
  • NUXT_PUBLIC_APP_NAME → 映射到 runtimeConfig.public.appName

7. 开发者工具

开发模式下,页面底部或浏览器扩展可打开 Nuxt DevTools

  • 查看路由、组件树
  • 检查 useFetch / useAsyncData 状态
  • 看 modules、hooks 等

启用方式(默认通常已开):

ts 复制代码
export default defineNuxtConfig({
  devtools: { enabled: true },
})

8. 本阶段小练习(必做)

按顺序完成,打勾:

  1. Node 20+、pnpm 安装成功,pnpm dev 能打开页面
  2. app.vue 使用 <NuxtLayout> + <NuxtPage>
  3. 有首页 / 和关于页 /about,可用 <NuxtLink> 互相跳转
  4. 在关于页用 useSeoMeta 设置了 title
  5. nuxt.config.ts 里加了 runtimeConfig.public.appName,并在首页展示它

加分题:

  • 再建一页 /contact,表单有姓名、邮箱两个输入框(先不用提交)
  • 给首页加一张放在 public/hero.jpg 的图片:<img src="/hero.jpg" alt="hero" />

9. 常见问题

Q:端口被占用?

bash 复制代码
pnpm dev -- --port 3001

Q:改了代码没热更新?

确认改的是 app/ 下文件;重启一次 pnpm dev

Q:和 Nuxt 3 教程目录不一样?

Nuxt 4 默认把页面等放进 app/。老教程里根目录的 pages/,在 Nuxt 4 对应 app/pages/

Q:必须用 TypeScript 吗?

强烈建议用。也可以写纯 JS(.vue 里不写 lang="ts"),但后面类型提示会少很多。


10. 阶段总结

你已经完成:

  • 开发环境与项目脚手架
  • Nuxt 4 的 app/ 目录心智模型
  • 文件路由与页面跳转
  • 基础 SEO meta 与 runtimeConfig

下一篇:阶段二 ------ 路由进阶、布局、组件自动导入、composables,做一个三页个人博客骨架。


参考链接

相关推荐
小堂子这厢有礼了1 天前
Chet.Admin 模块详解②:用户管理与个人中心
vue·rbac·后台管理系统·用户权限·.net10·vbenadmin
万敏1 天前
Vue3 全栈实战第三周:组件化开发完整记录 —— Props / Emit / provide-inject / 插槽 / 自定义指令
vue.js·node.js·全栈
sugar__salt1 天前
Vue.js 前置知识:ES6+ 核心特性完全指南
前端·javascript·vue.js·vue·es6
Dontla1 天前
WIP(Work In Progress的缩写,意思是“正在进行中的工作“或“未完成的工作)landing WIP、WIP Limit
全栈
sugar__salt1 天前
Vue3 基础知识点整理 —— 从入门到响应式核心完全指南
vue.js·笔记·vue·vue3
钛态3 天前
前端安全防线:CSRF 攻击链路与双重 Token 校验的工程实现
前端·vue·react·web
zhz52143 天前
GIS项目中空间参考转换与MBTiles偏移:问题成因、解法与避坑
python·vue·gis
用户938515635073 天前
SSE 流式输出的工程化拐点——为什么你需要一个 BFF 层
javascript·人工智能·全栈
钛态3 天前
AI 组件生成评测:别只看页面能不能渲染
前端·vue·react·web