Nuxt.js 4 快速入门指南
1. 还在手动搭建 Vue 全家桶?Nuxt 让你换个活法
你是否经历过这样的场景:为了一个需要兼顾首屏性能和SEO的新项目,你不得不从零开始,手动集成 Vue、Vue Router、Vite/Webpack,并与复杂的 SSR (服务端渲染) 配置搏斗?路由要自己配,状态管理要自己引,组件要一个个 import
,一套流程下来,还没开始写业务代码,就已经筋疲力尽。
Nuxt.js 4 就是来终结这种痛苦的。
它不仅仅是一个 Vue 框架,更是一套围绕 Vue 生态的最佳实践集合。它通过"约定优于配置"的理念,帮你处理了所有繁琐的工程化配置。路由根据文件自动生成,组件、Hooks 自动导入,服务端渲染开箱即用。
你可以将它理解为一套"精装修"的开发环境,让你能把 100% 的精力投入到业务逻辑的创造中,享受前所未有的丝滑开发体验。
2. 环境搭建与项目初始化
环境要求
- Node.js: 20.x 或更新版本。
创建新项目
使用你喜欢的包管理器,在终端中运行以下命令:
bash
pnpm create nuxt@latest my-awesome-nuxt-app
启动开发服务器
进入项目目录并启动开发服务器:
bash
cd my-awesome-nuxt-app
pnpm dev -o
服务器启动后,会自动在浏览器中打开项目。
3. 核心概念快速入门
项目结构
Nuxt 4 采用了新的 app/
目录结构。对于初学者,最需要关注的是:
app/pages/
: 存放你的页面组件,Nuxt会根据这个目录下的文件结构自动生成路由。app/components/
: 存放可复用的Vue组件。app/layouts/
: 存放布局文件,可以定义网站的通用结构(如页头和页脚)。app/assets/
: 存放需要经由构建工具处理的资源文件,如样式、字体和图片。public/
: 存放不需要构建处理的静态资源,会直接被复制到服务器根目录。
页面和路由
在 app/pages/
目录下创建一个 .vue
文件即可创建一个新的页面。
例如,创建 app/pages/about.vue
:
vue
<template>
<h1>关于我们</h1>
</template>
现在,你可以通过访问 /about
路径来查看这个页面。
动态路由
创建一个动态页面同样简单。例如,我们来创建一个博客文章页面 app/pages/posts/[id].vue
。文件名中的 [id]
会被Nuxt理解为一个动态参数。
vue
<!-- app/pages/posts/[id].vue -->
<template>
<h1>文章详情:{{ $route.params.id }}</h1>
</template>
现在,访问 /posts/1
或 /posts/hello-world
,页面就会动态显示对应的ID。
组件与布局
✨ Nuxt 的魔法时刻:自动导入
你可能已经注意到,我们在使用 <TheHeader />
组件时,并没有在布局文件中手动 import
它。这就是Nuxt的魅力之一:组件自动导入 。只要是放在 app/components/
目录下的组件,Nuxt都会自动识别并在你需要时直接使用,极大地简化了代码。
创建组件
在 app/components/
目录下创建组件,例如 TheHeader.vue
:
vue
<template>
<header class="main-header">
<h1>我的网站</h1>
</header>
</template>
使用布局
布局是包裹页面的通用UI结构。在 app/layouts/
目录下创建 default.vue
文件,Nuxt会自动将其作为默认布局。
vue
<!-- app/layouts/default.vue -->
<template>
<div>
<TheHeader />
<main>
<slot /> <!-- 页面内容将在这里渲染 -->
</main>
</div>
</template>
这样,所有页面都会自动包含 <TheHeader>
组件。
添加样式与资源
全局样式
-
在
app/assets/css/
目录下创建main.css
文件。 -
在
nuxt.config.ts
中配置它:typescriptexport default defineNuxtConfig({ css: ['~/assets/css/main.css'], })
局部样式
在组件的 <style scoped>
块中编写的样式将只作用于当前组件。
使用图片
将图片(如 logo.png
)放入 app/assets/images/
目录,然后在组件中引用:
vue
<template>
<img src="~/assets/images/logo.png" alt="Logo">
</template>
数据获取
Nuxt 提供了 useFetch
来方便地获取数据。它是一个强大的组合式函数,相比传统的axios等请求库,它能智能地在服务端和客户端执行,避免数据二次请求,还能自动处理加载状态和错误,是Nuxt项目中的首选数据获取方式。
在你的页面组件中使用它:
vue
<template>
<div>
<h1>文章列表</h1>
<div v-if="pending">正在加载...</div>
<ul v-else>
<li v-for="post in posts" :key="post.id">{{ post.title }}</li>
</ul>
</div>
</template>
<script setup>
const { pending, data: posts } = await useFetch('https://jsonplaceholder.typicode.com/posts?_limit=5')
</script>
这个例子会从一个公共API获取文章列表并展示出来。
4. 构建与部署
当你的网站开发完成后,可以将其构建并部署到线上。
构建项目
运行以下命令来为生产环境构建你的应用:
bash
pnpm build
这会在 .output
目录下生成部署所需的文件。
本地预览
你可以本地预览构建后的应用,以检查它在生产环境中的表现:
bash
pnpm preview
部署
你可以将 .output
目录的内容部署到任何支持Node.js的平台,或者选择Vercel、Netlify等流行的静态托管平台进行一键部署。
5. 你已掌握基础,现在去创造伟大的应用吧!
恭喜你,已经完成了 Nuxt 的快速入门!你不再是一个人在搭建复杂的工程化体系,而是站在了巨人的肩膀上。现在,你已经掌握了自动化路由、组件自动导入、开箱即用的数据获取等核心技能。
但 Nuxt 的世界才刚刚向你敞开大门。接下来,你可以:
- 深入模块生态 : 像搭乐高一样,用
@nuxt/content
轻松搭建博客或文档,用@nuxtjs/tailwindcss
集成原子化 CSS,用@nuxt/image
优化图片性能。 - 精通状态管理 : 探索
useState
和 Pinia 模块,在你的应用中优雅地管理和共享状态。 - 成为全栈高手 : 深入
server/
目录,编写自己的 API 接口,连接数据库,处理业务逻辑,成为一名真正的全栈开发者。
Nuxt 已经为你铺平了道路,现在,尽情去探索和创造吧!
🤝 交流与分享
💬 你在学习 Nuxt 的过程中遇到了哪些有趣的问题?
🤔 接下来你最想用 Nuxt 挑战什么样的项目?
🌟 如果这篇指南对你有帮助,请点赞收藏,让更多人看到!
作者寄语:掌握一个框架只是起点,真正的乐趣在于用它创造价值。Nuxt 为你扫清了工程化的障碍,让你能更纯粹地享受创造的快乐。希望这篇指南是你探索 Nuxt 世界的第一块基石。让我们一起在实践中构建,在分享中成长!